cMapa = new MyClass({
	id 						: null,
	maximizado				: null,
	divContent				: null,
	tipoMapa				: null,
	oMap					: null,//objeto OpenLayers.Map
	oHistorico				: null,//objeto cHistorico
	misVehiculosMarkersHash : null,//hash con los Iconos de los vehiculos (se van creando a medida que se van seleccionando)
	misVehiculosSentidoHash : null,
	misVehiculosSeguiMarker : null,
	misVehiculosSelecMarker : null,
	vehiculosVisiblesId		: null,//moviles visibles
	vehiculosSeleccionadosId: null,//moviles seleccionados
	cuentaSelectSelection	: null,//movil seleccionado
	cuentaSelectSegui		: null,//movil en seguimiento
	//monitor///////
	layerEventosMonitor		: null,
	//////fijos/////////////
	fijosLayer				: null,
	fijosVisiblesId			: null,
	misFijosMarkersHash 	: null,//hash con los Iconos de los Fijos (se van creando a medida que se van seleccionando)
	fijosSeleccionadosId	: null,
	fijosSimpleLayer		: null,
	/////////////////////////
	//puntos////////////////
	mispuntosLayer 			: null, //capa del mapa en donde se imprimen los iconos de mis puntos.
	misPuntosHash 			: null,////hash de todos los puntos, accesible por id del punto
	misGruposHash 			: null, ////hash de todos los grupos, accesible por id del grupo
	misPuntosMarkersHash 	: null, //hash con los Markers de los puntos (se van creando a medida que se hacen visibles)
	puntosSeleccionadosId 	: null,
	puntosSeleccionadosHeredadosId : null,
	misPuntosPopupActive 	: null,
	misPuntosVisiblesId 	: null,
	highlightCercaniasLayer : null,
	highlightCercaniasTimeOut : null,
	distancesCercaniasLayer	: null,
	layerRecorridos			: null,
	movilesCercanosHash  	: null,//HASHTABLE CON OBJETOS JS DEL TIPO 'movilesCercanosHash'
	/////////////////////
	///////zonas/////////////
	zonasSeleccionadasId	: null,
	zonasSeleccionadasHeredadasId:null,
	misZonasVisiblesId		: null,
	highlightZona			: null, //Polyline NEGRA que se marca en los limites de las zonas para denotar su seleccion...
	highlightZonaTimeOut 	: null,
	newZonaPolygonLayer		: null,
	isNewZona 				: null,
	newZonaPolygonLayer		: null,
	newZonaMarkersLayer		: null,
	newZonaEvents 			: null,
	dragUpdateZonaMarkersEvents: null,
	newZonaLineColor 		: null,
	newZonaPoints			: null,
	newZonaMarkers 			: null,
	newZonasHistorial 		: null,//array de arrays. Guarda las markers que se han ido creando en el orden que corresponde
	misZonasMarkersHash		: null,//hash con los Polygonos de las zonas (se van creando a medida que se hacen visibles)
	////////////////////////
	////////rutas///////////
	misRutasLayer			: null,//layer para marcar mis rutas;
	misRutasMarkersHash		: null,
	misRutasVisiblesId 		: null,
	rutasSeleccionadasId 	: null,
	isNewRuta 				: null,
	newRutaMarkersLayer 	: null,
	newRutaLineColor 		: null,
	newRutaMarkers		 	: null,
	newRutaPoints		 	: null,
	newRutasHistorial 		: null,//arrays. Guarda las markers que se han ido creando en el orden que corresponde
	searchRutasLayer		: null,
	searchRutasMarkers		: null,
	////////////////////////
	////////Misc////////////
	gestorDirMarkersLayer 	: null,//capa del mapa en donde se imprimen los iconos de direcciones.
	gestorDirHash			: null,//HASHTABLE CON OBJETOS JS DEL TIPO 'GestorDirElement'
	flagConvertGestorDirToPoint : null,
	//////////////////////
	projection 				: null,
   	displayProjection 		: null,
	calles					: null,
	servers					: null,
	toolMeasure				: null,
	toolArea				: null,
	panel					: null,
	selectToolsMenu			: null,
	lonlat					: null,
	defaultEvents			: null,
	vehiculosSimpleLayer	: null,
	vehiculosSentidosSimpleLayer	: null,
	vehiculosLayer			: null,
	selectVehiculoSimple	: null,
	movilFeature			: null,
	layerEventosReporte		: null,
	eventosReportePopup		: null,
	eventosMonitorPopup		: null,
	////seguimiento estela/////
	estelaSeguimientoLayer	: null,
	estelaSeguimientoActive	: null,
	estelaSeguimientoPtoAnterior : null,
	estelaSeguimientoLATAnterior : null,
	estelaSeguimientoLONAnterior : null,
	BTNestelaSeguimiento	: null,
	menuOpcion				: null,
	backGroundMenu			: null,
	///////////FLAGS////////
	bModoABMPuntos			: null,
	bModoABMZonas			: null,
	bTienePuntosTemp		: null,
	bModoABMRutas			: null,
	////////////////////////
	mapServerActual			: null,
	mapBaseType				: null,
	map_selectMapMenu		: null,
	map_selectServerMenu	: null,
	mapServers				: null,
	misPopups				: null,
	highlightViajesTimeOut  : null,
	puntosRutaIniFin		: null,
	tipoCrearRuta			: null,
	rutaDesdeMovil			: null,
	highlightEventoClienteLayer	: null,
	estadoActivoMonitorearEventoCliente	: null,
	objetoMonitorearEventoCliente	: null,
	layerSeguimientoEvento	: null,
	linkEventoShow			: null,
	rutaDesdeHistorico  	: null,
	rutaDesdeArchivo		: null,
	markersRutaHistorico	: null,
	rutaTemporal			: null,
	
	init: function(){
		this.oHistorico					= new cHistorico();
		this.vMaps 						= new Array();
		this.vehiculosVisiblesId		= new Array();
		this.vehiculosSeleccionadosId	= new Array();
		this.fijosVisiblesId			= new Array();
		this.fijosSeleccionadosId		= new Array();
		this.projection 				= new OpenLayers.Projection("EPSG:4326");
		this.displayProjection 			= new OpenLayers.Projection("EPSG:4326");
		this.maximizado					= false;
		this.estelaSeguimientoActive	= false;
		this.ultPos 					= 0;
		this.misFijosMarkersHash 		= null;
		this.misVehiculosSeguiMarker	= null;
		this.misVehiculosSelecMarker	= null;
		this.vehiculosSentidosSimpleLayer= null;
		this.vehiculosSimpleLayer		= null;
		this.fijosSimpleLayer			= null;
		this.cuentaSelectSelection 		= "-1";
		this.cuentaSelectSegui 			= "-1";
		this.estelaSeguimientoLayer		= new OpenLayers.Layer.Vector("estelaSeguimientoLayer");
		this.gestorDirMarkersLayer 		= new OpenLayers.Layer.Markers("Gestor Direcciones" );
		this.misRutasLayer				= new OpenLayers.Layer.Markers("Mis Rutas"); //capa del mapa en donde se imprimen las rutas;
		this.searchRutasLayer			= new OpenLayers.Layer.Vector("Search Rutas");
		this.mispuntosLayer				= new OpenLayers.Layer.Markers("Mis Puntos"); //capa del mapa en donde se imprimen los iconos de mis puntos.
		this.BTNestelaSeguimiento 		= document.getElementById('activateEstelaSeguimientoBTN');
		this.menuOpcion					= "vehiculos";
		this.puntosSeleccionadosId 		= new Array();
		this.puntosSeleccionadosHeredadosId = new Array();
		this.misPuntosVisiblesId 		= new Array();
		this.layerRecorridos			= new Array();
		this.newZonaPoints 				= new Array();
		this.newZonaMarkers 			= new Array();
		this.newZonasHistorial 			= new Array();
		this.misZonasVisiblesId			= new Array();
		this.zonasSeleccionadasId		= new Array();
		this.zonasSeleccionadasHeredadasId = new Array();
		this.misRutasVisiblesId			= new Array();
		this.rutasSeleccionadasId		= new Array();
		this.mapServers					= new Array();
		this.newRutaMarkers 			= new Array();
		this.newRutaPoints				= new Array();
		this.newRutasHistorial			= new Array();
		this.misVehiculosSentidoHash 	= new Hashtable();
		this.misPuntosHash 				= new Hashtable(); ////hash de todos los puntos, accesible por id del punto
		this.misGruposHash				= new Hashtable(); ////hash de todos los grupos, accesible por id del grupo
		this.misPuntosMarkersHash 		= new Hashtable(); //hash con los Markers de los puntos (se van creando a medida que se hacen visibles)
		this.distancesCercaniasLayer	= new Hashtable();
		this.movilesCercanosHash 		= new Hashtable(); //HASHTABLE CON OBJETOS JS DEL TIPO 'movilesCercanosHash'
		this.misZonasMarkersHash		= new Hashtable(); //hash con los Polygonos de las zonas (se van creando a medida que se hacen visibles)
		this.gestorDirHash 				= new Hashtable(); //HASHTABLE CON OBJETOS JS DEL TIPO 'GestorDirElement'
		this.misRutasMarkersHash		= new Hashtable();
		this.highlightCercaniasLayer	= null;
		this.misPuntosPopupActive 		= null;
		this.highlightZona				= null; //Polyline NEGRA que se marca en los limites de las zonas para denotar su seleccion...
		this.newZonaPolygonLayer 		= null;
		this.newZonaMarkersLayer 		= null;
		this.newZonaEvents				= null;
		this.dragUpdateZonaMarkersEvents= null;
		this.layerEventosReporte		= null;
		this.eventosReportePopup		= null;
		this.layerEventosMonitor		= null;
		this.eventosMonitorPopup		= null;
		this.misPopups					= null;
		this.newRutaMarkersLayer 		= null;
		this.searchRutasMarkers			= null;
		this.bModoABMPuntos				= false;
		this.bModoABMZonas				= false;
		this.bModoABMRutas				= false;
		this.isNewZona 					= true;
		this.bTienePuntosTemp			= false;
		this.flagConvertGestorDirToPoint= false;
		this.isNewRuta 					= true;
		this.highlightZonaTimeOut 		= 0;
		this.highlightCercaniasTimeOut 	= 0;
		this.highlightViajesTimeOut 	= 0;
		this.backGroundMenu				= "#E3E3E3";
		this.newZonaLineColor 			= "#414141";
		this.newRutaLineColor 			= "#414141";
		this.puntosRutaIniFin			= new Array();
		this.tipoCrearRuta				= 1;//1:creacion manual, 2:creacion inicio y fin, 3: ,4: desde historico
		this.rutaDesdeMovil				= false;
		this.highlightEventoClienteLayer= null;
		this.estadoActivoMonitorearEventoCliente = false;
		this.objetoMonitorearEventoCliente = null;
		this.rutaDesdeHistorico			= false;
		this.rutaDesdeArchivo			= false;
		this.markersRutaHistorico		= new Array();//2 marcas para guardar el inicio y fin de la ruta desde historico. [0]:inicio, [1]:fin
		this.rutaTemporal				= null;
	},

	getId: function(){
		return this.id;
	},
	getDivContent: function(){
		return this.divContent;
	},
	getMap:  function(){
		return this.oMap;
	},
	getProjection: function(){
		return this.projection;
	},
	getDisplayProjection: function(){
		return this.displayProjection;
	},
	getCalles: function(){
		return this.calles;
	},
	getToolMeasure: function(){
		return this.toolMeasure;
	},
	getToolArea: function(){
		return this.toolArea;
	},
	getPanel: function(){
		return this.panel;
	},
	getSelectToolsMenu: function(){
		return this.selectToolsMenu;
	},
	getLonLat: function(){
		return this.lonlat;
	},
	getDefaultEvents: function(){
		return this.defaultEvents;
	},
	getVehiculosSentidosSimpleLayer: function(){
		return this.vehiculosSentidosSimpleLayer;
	},
	getVehiculosSimpleLayer: function(){
		return this.vehiculosSimpleLayer;
	},
	getVehiculosLayer: function(){
		return this.vehiculosLayer;
	},
	getSelectVehiculoSimple: function(){
		return this.selectVehiculoSimple;
	},
	getMovilFeature: function(){
		return this.movilFeature;
	},
	getMisVehiculosMarkersHash: function(){
		return this.misVehiculosMarkersHash;
	},
	getMisVehiculosSentidoHash: function(){
		return this.misVehiculosSentidoHash;
	},
	getVehiculosVisiblesId: function(){
		return this.vehiculosVisiblesId;
	},
	getVehiculosSeleccionadosId: function(){
		return this.vehiculosSeleccionadosId;
	},
	getSeleccionActual: function(){
		return this.cuentaSelectSelection;
	},
	getCuentaSeguimiento: function(){
		return this.cuentaSelectSegui;
	},
	getEstelaSeguimientoLayer: function(){
		return this.estelaSeguimientoLayer;
	},
	getBTNestelaSeguimiento: function(){
		return this.BTNestelaSeguimiento;
	},
	getEstelaSeguimientoActive: function(){
		return this.estelaSeguimientoActive;
	},
	getMenuOpcion: function(){
		return this.menuOpcion;
	},
	getColorMenu: function(){
		return this.backGroundMenu;
	},
	getHistorico: function(){
		return this.oHistorico;
	},
	/////////puntos///////////////
	getPuntosVisiblesId: function(){
		return this.misPuntosVisiblesId;
	},
	getMisGruposHash: function(){
		return this.misGruposHash;
	},
	getMisPuntosLayer: function(){
		return this.mispuntosLayer;
	},
	getMisPuntosMarkers: function(){
		return this.misPuntosMarkersHash;
	},
	getMisPuntosHash: function(){
		return this.misPuntosHash ;
	},
	getMisPuntosSeleccionadosHeredadosId: function(){
		return this.puntosSeleccionadosHeredadosId ;
	},
	getPuntosSeleccionadosId: function(){
		return this.puntosSeleccionadosId ;
	},
	getModoABMPuntos: function(){
		return this.bModoABMPuntos;
	},
	/////////zonas///////////////
	getZonasVisiblesId: function(){
		return this.misZonasVisiblesId;
	},
	getZonasSeleccionadasId: function(){
		return this.zonasSeleccionadasId;
	},
	getZonasSeleccionadasHeredadasId: function(){
		return this.zonasSeleccionadasHeredadasId;
	},
	getZonasMarkersHash: function(){
		return this.misZonasMarkersHash;
	},
	getNewZonaMarkersLayer: function(){
		return this.newZonaMarkersLayer;
	},
	getNewZonaPolygonLayer: function(){
		return this.newZonaPolygonLayer ;
	},
	getNewZonaEvents: function(){
		return this.newZonaEvents;
	},
	getModoABMZonas: function(){
		return this.bModoABMZonas;
	},
	getNewZonaMarkers : function(){
		return this.newZonaMarkers ;
	},
	getNewZonaPoints: function(){
		return this.newZonaPoints ;
	},
	//////////////misc//////////
	getGestorDirMarkersLayer: function(){
		return this.gestorDirMarkersLayer ;
	},
	getGestorDirHash: function(){
		return this.gestorDirHash ;
	},
	getTienePuntosTemp: function(){
		return this.bTienePuntosTemp ;
	},
	getServers: function(){
		return this.map_selectServerMenu ;
	},
	////////////FIJOS/////////////
	getFijosSimpleLayer: function(){
		return this.fijosSimpleLayer;
	},
	getFijosLayer: function(){
		return this.fijosLayer;
	},
	getSelectFijoSimple: function(){
		return this.selectFijoSimple;
	},
	getFijoFeature: function(){
		return this.fijoFeature;
	},
	getMisFijosMarkersHash: function(){
		return this.misFijosMarkersHash;
	},
	getFijosVisiblesId: function(){
		return this.fijosVisiblesId;
	},
	getFijosSeleccionadosId: function(){
		return this.fijosSeleccionadosId;
	},
	getMaximizado: function(){
		return this.maximizado;
	},
	getLayerEventosReporte: function(){
		return this.layerEventosReporte;
	},
	getEventosReportePopup: function(){
		return this.eventosReportePopup;
	},
	///monitor////
	getLayerEventoMonitor: function(){
		return this.layerEventosMonitor;
	},
	getEventosMonitorPopup: function(){
		return this.eventosMonitorPopup;
	},
	/////////////
	getMisPopups: function(){
		return this.misPopups;
	},
	//////rutas/////////////
	getMisRutasLayer: function(){
		return this.misRutasLayer;
	},
	getMisRutasVisibles: function(){
		return this.misRutasVisiblesId;
	},
	getNewRutaMarkersLayer: function(){
		return this.newRutaMarkersLayer;
	},
	getNewRutaMarkers: function(){
		return this.newRutaMarkers;
	},
	getNewRutaPoints: function(){
		return this.newRutaPoints;
	},
	getNewRutasHistorial: function(){
		return this.newRutasHistorial;
	},
	getMisRutasMarkersHash: function(){
		return this.misRutasMarkersHash;
	},
	getRutasSeleccionadasId: function(){
		return this.rutasSeleccionadasId;
	},
	getSearchRutasLayer: function(){
		return this.searchRutasLayer;
	},
	//////
	getHighlightCercaniasLayer : function(){
		return this.highlightCercaniasLayer;
	},
	getHighlightViajesTimeOut: function(){
		return this.highlightViajesTimeOut;
	},
	getTipoCrearRuta: function(){
		return this.tipoCrearRuta;
	},
	getEstadoActivoMonitorearEventoCliente: function(){
		return this.estadoActivoMonitorearEventoCliente;
	},
	getObjetoMonitorearEventoCliente: function(){
		return this.objetoMonitorearEventoCliente;
	},
	getRutaDesdeHistorico: function(){
		return this.rutaDesdeHistorico;
	},
	getMarkersRutaHistorico: function(pos){
		return this.markersRutaHistorico[pos];
	},
	getRutaTemporal: function(){
		return this.rutaTemporal;
	},
	////////////////////SETS///////////////////////////////
	setId: function(iId){
		this.id = iId;
		this.oHistorico.setMapaId(this.id);
	},
	setDivContent:  function(div){
		this.divContent = div;
	},
	setMap:	 function(oMap){
		this.oMap = oMap;
	},
	setProjection: function(projection){
		this.projection = projection;
	},
	setDisplayProjection: function(displayProjection){
		this.displayProjection = displayProjection;
	},
	setCalles:  function(calles){
		this.calles = calles;
	},
	setToolMeasure:  function(toolMeasure){
		this.toolMeasure = toolMeasure;
	},
	setToolArea:  function(toolArea){
		this.toolArea = toolArea;
	},
	setPanel:  function(panel){
		this.panel= panel;
	},
	setSelectToolsMenu: function(selectToolsMenu){
		this.selectToolsMenu = selectToolsMenu;
	},
	setLonLat: function(lonlat){
		this.lonlat = lonlat;
	},
	setDefaultEvents: function(defaultEvents){
		this.defaultEvents = defaultEvents;
	},
	setVehiculosSentidosSimpleLayer: function(layer){
		this.vehiculosSentidosSimpleLayer = layer;
	},
	setVehiculosSimpleLayer: function(vehiculosSimpleLayer){
		this.vehiculosSimpleLayer = vehiculosSimpleLayer;
	},
	setVehiculosLayer: function(vehiculosLayer){
		this.vehiculosLayer = vehiculosLayer;
	},
	setSelectVehiculoSimple: function(selectVehiculoSimple){
		this.selectVehiculoSimple = selectVehiculoSimple;
	},
	setMovilFeature: function(movilFeature){
		this.movilFeature = movilFeature;
	},
	setMisVehiculosMarkersHash: function(misVehiculosMarkersHash){
		this.misVehiculosMarkersHash = misVehiculosMarkersHash;
	},
	setVehiculosVisiblesId: function(vehiculosVisiblesId){
		this.vehiculosVisiblesId = vehiculosVisiblesId;
	},
	setVehiculosSeleccionadosId: function(vehiculosSeleccionadosId){
		this.vehiculosSeleccionadosId = vehiculosSeleccionadosId;
	},
	setSeleccionActual: function(cuentaSelectSelection){
		this.cuentaSelectSelection = cuentaSelectSelection;
	},
	setCuentaSeguimiento: function(cuentaSelectSegui){
		this.cuentaSelectSegui = cuentaSelectSegui;
	},

	setEstelaSeguimientoLayer: function(estelaSeguimientoLayer){
		this.estelaSeguimientoLayer = estelaSeguimientoLayer;
	},

	setBTNestelaSeguimiento: function(BTNestelaSeguimiento){
		this.BTNestelaSeguimiento = BTNestelaSeguimiento;
	},

	setMenuOpcion: function(opcion){
		this.menuOpcion = opcion;
	},

	setColorMenu: function(color){
		this.backGroundMenu = color;
	},

	setHistorico: function(oHist){
		this.oHistorico = oHist;
	},

	setPuntosVisiblesId: function(puntosVisiblesID){
		this.misPuntosVisiblesId = puntosVisiblesID;
	},

	setMisGruposHash: function(misGrupos){
		this.misGruposHash = misGrupos;
	},
	setMisPuntosLayer: function(layer){
		this.mispuntosLayer = layer;
	},
	setMisPuntosMarkers: function(markers){
		this.misPuntosMarkersHash = markers;
	},
	setMisPuntosHash: function(puntosHash){
		this.misPuntosHash = puntosHash;
	},
	setMisPuntosSeleccionadosHeredadosId: function(puntosSelecHeredados){
		this.puntosSeleccionadosHeredadosId = puntosSelecHeredados ;
	},
	setPuntosSeleccionadosId: function(ptosSeleccionadosID){
		this.puntosSeleccionadosId = ptosSeleccionadosID;
	},
	setModoABMPuntos: function(abm){
		this.bModoABMPuntos = abm;
	},
	///zonas////
	setZonasVisiblesId: function(zonasVisibles){
		this.misZonasVisiblesId = zonasVisibles;
	},
	setZonasSeleccionadasId: function(zonas){
		this.zonasSeleccionadasId = zonas;
	},
	setZonasMarkersHash: function(zonasMarkers){
		this.misZonasMarkersHash = zonasMarkers;
	},
	setNewZonaPolygonLayer: function(ZonaPolygonLayer){
		this.newZonaPolygonLayer = ZonaPolygonLayer;
	},
	setNewZonaMarkersLayer: function(ZonaMarkersLayer){
		this.newZonaMarkersLayer = ZonaMarkersLayer;
	},
	setNewZonaEvents: function(ZonaEvents){
		this.newZonaEvents = ZonaEvents;
	},
	setModoABMZonas: function(bModoABMZonas){
		this.bModoABMZonas = bModoABMZonas;
	},
	//////////////misc//////////
	setGestorDirMarkersLayer: function(layer){
		this.gestorDirMarkersLayer = layer;
	},
	setGestorDirHash: function(gestorDir){
		this.gestorDirHash = gestorDir;
	},
	setTienePuntosTemp: function(tienePuntos){
		this.bTienePuntosTemp = tienePuntos;
	},
	setFlagConvertGestorDirToPoint: function(toPoint){
		this.flagConvertGestorDirToPoint = toPoint;
	},
	setServers: function(servers){
		this.map_selectServerMenu = servers;
	},
	//////FIJOS//////

	setFijosSimpleLayer: function(fijosSimpleLayer){
		this.fijosSimpleLayer = fijosSimpleLayer;
	},

	setFijosLayer: function(fijosLayer){
		this.fijosLayer = fijosLayer;
	},

	setSelectFijoSimple: function(selectFijoSimple){
		this.selectFijoSimple = selectFijoSimple;
	},

	setMovilFeature: function(movilFeature){
		this.movilFeature = movilFeature;
	},

	setMisFijosMarkersHash: function(misFijosMarkersHash){
		this.misFijosMarkersHash = misFijosMarkersHash;
	},

	setFijosSeleccionadosId: function(fijosSeleccionadosId){
		this.fijosSeleccionadosId = fijosSeleccionadosId;
	},

	setFijosVisiblesId: function(fijosIds){
		this.fijosVisiblesId = 	fijosIds;
	},
	setMaximizado: function(max){
		this.maximizado = 	max;
	},
	setLayerEventosReporte: function(valor){
		this.layerEventosReporte = 	valor;
	},
	setEventosReportePopup: function(valor){
		this.eventosReportePopup = 	valor;
	},
	///monitor////
	setLayerEventoMonitor: function(layer){
		this.layerEventosMonitor = layer;
	},
	setEventosMonitorPopup: function(popup){
		this.eventosMonitorPopup = popup;
	},
	setMisPopups: function(popup){
		this.misPopups = popup;
	},
	//////rutas/////////////
	setMisRutasLayer: function(layer){
		this.misRutasLayer = layer;
	},
	setMisRutasVisibles: function(rutas){
		this.misRutasVisiblesId = rutas;
	},
	setNewRutaMarkersLayer: function(layer){
		this.newRutaMarkersLayer = layer;
	},
	setNewRutaMarkers: function(markers){
		this.newRutaMarkers = markers;
	},
	setNewRutaPoints: function(points){
		this.newRutaPoints = points;
	},
	setNewRutasHistorial: function(historial){
		this.newRutasHistorial = historial;
	},
	setMisRutasMarkersHash: function(markers){
		this.misRutasMarkersHash = markers;
	},
	setRutasSeleccionadasId: function(rutas){
		this.rutasSeleccionadasId = rutas;
	},
	setSearchRutasLayer: function(layer){
		this.searchRutasLayer = layer;
	},
	setRutaDesdeMovil: function(bRutaDesdeMovil){
		this.rutaDesdeMovil = bRutaDesdeMovil;
	},
	/////
	setHighlightCercaniasLayer : function(layer){
		this.highlightCercaniasLayer = layer;
	},
	setHighlightViajesTimeOut: function(time){
		this.highlightViajesTimeOut = time;
	},
	setTipoCrearRuta: function(tipo){
		this.tipoCrearRuta = tipo;
	},
	setEstadoActivoMonitorearEventoCliente: function(valor){
		this.estadoActivoMonitorearEventoCliente = valor;
	},
	setObjetoMonitorearEventoCliente: function(obj){
		this.objetoMonitorearEventoCliente = obj;
	},
	setLinkEventoShow: function(valor){
		this.linkEventoShow = valor;
	},
	setRutaDesdeHistorico: function(valor){
		this.rutaDesdeHistorico = valor;
	},
	setMarkersRutaHistorico: function(valor,pos){
		this.markersRutaHistorico[pos] = valor;
	},
	setRutaTemporal: function(ruta){
		this.rutaTemporal = ruta;
	},
	/************************************************
	 * INIT MAPAS 									*
	 ***********************************************/
	inicializarBykom: function(nro){
		INITIAL_MAP_ZOOM = 13;
		var extent 				= new OpenLayers.Bounds( AVL_BOUNDS);
	    var tempScales 			= AVL_SCALES_LIST;
		this.projection 		= new OpenLayers.Projection("EPSG:4326");
		this.displayProjection 	= new OpenLayers.Projection("EPSG:4326");

		var callesUrl 	= "http://"+AVL_MAP_SERVER_IP+":"+AVL_MAP_SERVER_PORT+"/mapguide/mapagent/mapagent.fcgi?USERNAME="+AVL_MAP_SERVER_ADMIN+"&PASSWORD="+AVL_MAP_SERVER_PASSW+"&";
        var callesParams= {
        	mapdefinition: AVL_MAP_DEFINITION,
        	basemaplayergroupname: AVL_MAP_BASE_LAYER_GROUP
        }
        var callesOptions = {
        	singleTile: false
        }
    	mapOptions  =  {
		        			projection: this.projection,
		        			displayProjection: this.displayProjection ,
		                	maxExtent: extent,
		                    scales: tempScales
		                  };
		this.oMap 	= new OpenLayers.Map( 'map_canvas'+nro, mapOptions);
		this.calles	= new OpenLayers.Layer.MapGuide( "Bykom Maps Calles", callesUrl, callesParams, callesOptions );
		this.oMap.addLayer(this.calles);
		this.selectToolsMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Mapa', width:'100px'});
		this.selectToolsMenu.addItem('Calles',function(){
			 								cMapController.getMapActive().getMap().setBaseLayer(this.calles);
										},"clickMap5('" + nro + "')"
							);
		this.oMap.addControl(this.selectToolsMenu);
		this.backGroundMenu = "#CCCCCC";
	},
	inicializarGoogle: function(nro){
		INITIAL_MAP_ZOOM = 13;
		// Seteo de proyecciones
		this.projection 		= new OpenLayers.Projection("EPSG:900913");
		this.displayProjection 	= new OpenLayers.Projection("EPSG:4326");

		mapOptions = {
                projection: this.projection,
                displayProjection: this.displayProjection,
                units: "km",
                numZoomLevels: 19,
                maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)
        };

		//asegurar la carga de GMAPS con REFRESH la primera vez que ingrese.

        this.oMap = new OpenLayers.Map('map_canvas'+nro, mapOptions);

		var gmap = new OpenLayers.Layer.Google(
                "Calles",
                {type: G_NORMAL_MAP, 'sphericalMercator': true, MAX_ZOOM_LEVEL:17}
        	);
            var gsat = new OpenLayers.Layer.Google(
                "Satelite",
                {type: G_SATELLITE_MAP, 'sphericalMercator': true}
            );
			var ghyb = new OpenLayers.Layer.Google(
                "Hibrido",
                {type: G_HYBRID_MAP, 'sphericalMercator': true}
            );
			var gphy = new OpenLayers.Layer.Google(
                "Fisico",
                {type: G_PHYSICAL_MAP, 'sphericalMercator': true}
            );

		this.oMap.addLayers([gmap, gsat, ghyb, gphy]);
		this.oMap.setBaseLayer(gmap);

		//selector de tipo de mapa
		var oldExtent = null;
		var oldProjection = null;
		var oldBaseLayer = null;
		var setOldValues=function(){
			oldExtent = null;
			oldProjection = null;
			oldBaseLayer = null;
			if (cMapController.getMapActive().getMap().baseLayer) {
	            oldExtent 		= cMapController.getMapActive().getMap().baseLayer.getExtent();
 		        oldProjection 	= cMapController.getMapActive().getMap().getProjectionObject();
				oldBaseLayer 	= cMapController.getMapActive().getMap().baseLayer;
        	}
		};

		var recenter=function(newBaseLayer){
			//map.render(mapCanvas);
			cMapController.getMapActive().getMap().updateSize();
			//map.render(mapCanvas); //lo repito por bug en eventos para ie 8
			if(oldBaseLayer!=newBaseLayer){
				var newCenter = (oldExtent) ? oldExtent.getCenterLonLat() : map.getCenter();
 		        var newExtent = oldExtent.clone();
                // Convert centre point to new layer projection - so we can
                // maintain roughly the same view
                var newProjection = cMapController.getMapActive().getMap().getProjectionObject();
                if(!oldProjection.equals(newProjection)) {
                    newCenter.transform(oldProjection, newProjection);
                    newExtent.transform(oldProjection, newProjection);
                }
				//the new zoom will either come from the converted old
 			    // Extent or from the current resolution of the map
 				var newZoom = (newExtent) ? cMapController.getMapActive().getMap().getZoomForExtent(newExtent, true) : cMapController.getMapActive().getMap().getZoomForResolution(cMapController.getMapActive().getMap().resolution, true);
                // zoom and force zoom change
                cMapController.getMapActive().getMap().setCenter(newCenter, newZoom, false, true);
				if(!oldProjection.equals(newProjection)) {
 	                // Also convert vector layers - assuming they are in the
 	                // same projection as the original baseLayer - we cannot
 	                // trust the projection property all the time as it is
 	                // used as a shortcut for externalProjection
 	                for (var l=0, len=cMapController.getMapActive().getMap().layers.length; l < len; l++) {
 	                    if(cMapController.getMapActive().getMap().layers[l].transform && (typeof cMapController.getMapActive().getMap().layers[l].transform == 'function')) {
 	                    	cMapController.getMapActive().getMap().layers[l].transform(oldProjection, newProjection);
 	                    }
 	                }
 	            }
			}
			collapseMenuBar();
			collapseMenuBar();
		};

		var selectMapMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Mapa', width:'100px'});
		selectMapMenu.addItem('Calles', function(){setOldValues(); cMapController.getMapActive().getMap().setBaseLayer(gmap); recenter(gmap);});
		selectMapMenu.addItem('Satelital', function(){setOldValues(); cMapController.getMapActive().getMap().setBaseLayer(gsat); recenter(gsat);});
		selectMapMenu.addItem('Hibrido', function(){setOldValues(); cMapController.getMapActive().getMap().setBaseLayer(ghyb); recenter(ghyb);});
		selectMapMenu.addItem('Fisico', function(){setOldValues(); cMapController.getMapActive().getMap().setBaseLayer(gphy); recenter(gphy);});
		this.oMap.addControl(selectMapMenu);
	},
	inicializarOpenStreet: function(nro){
		INITIAL_MAP_ZOOM 		= 12;
		this.projection 		= new OpenLayers.Projection("EPSG:900913");
		this.displayProjection	= new OpenLayers.Projection("EPSG:4326");
		var options = {
                projection: this.projection,
                displayProjection: this.displayProjection,
                units: "km",
                /*numZoomLevels: 18,
                maxResolution: 156543.0339,*/
                maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)
            };
      	this.oMap = new OpenLayers.Map('map_canvas'+nro, options);

        var mapnik = new OpenLayers.Layer.OSM();
        // create OAM layer
        var oam = new OpenLayers.Layer.XYZ(
             "OpenAerialMap",
             "http://tile.openaerialmap.org/tiles/1.0.0/openaerialmap-900913/${z}/${x}/${y}.png",
             {
             	sphericalMercator: true
             }
         );

         // create OSM layer
         var osmarender = new OpenLayers.Layer.OSM(
                "OpenStreetMap (Tiles@Home)",
                "http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png"
         );

        this.oMap.addLayers([mapnik, oam, osmarender]);

		//selector de tipo de mapa
		var selectMapMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Mapa', width:'100px'});

		selectMapMenu.addItem('Calles', function(){cMapController.getMapActive().getMap().setBaseLayer(mapnik);});
		selectMapMenu.addItem('Calles decorado', function(){cMapController.getMapActive().getMap().setBaseLayer(osmarender);});
		selectMapMenu.addItem('Aereo', function(){cMapController.getMapActive().getMap().setBaseLayer(oam);});
		this.oMap.addControl(selectMapMenu);
	},
	inicializarVirtualEarth: function(nro){
		INITIAL_MAP_ZOOM 		= 13;
		this.projection 		= new OpenLayers.Projection("EPSG:900913");
		this.displayProjection 	= new OpenLayers.Projection("EPSG:4326");

		mapOptions = {
                projection: this.projection,
                displayProjection: this.displayProjection,
                units: "km",
                maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)
        };

        this.oMap = new OpenLayers.Map('map_canvas'+nro, mapOptions);

        var veroad = new OpenLayers.Layer.VirtualEarth(
                "Virtual Earth Roads",
                {'type': VEMapStyle.Road, 'sphericalMercator': true}
        );
        var veaer = new OpenLayers.Layer.VirtualEarth(
                "Virtual Earth Aerial",
                {'type': VEMapStyle.Aerial, 'sphericalMercator': true}
        );
        var vehyb = new OpenLayers.Layer.VirtualEarth(
                "Virtual Earth Hybrid",
                {'type': VEMapStyle.Hybrid, 'sphericalMercator': true}
        );

        this.oMap.addLayers([veroad, veaer, vehyb]);

		//selector de tipo de mapa
		var selectMapMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Mapa', width:'100px'});
		selectMapMenu.addItem('Calles', function(){cMapController.getMapActive().getMap().setBaseLayer(veroad);});
		selectMapMenu.addItem('Aereo', function(){cMapController.getMapActive().getMap().setBaseLayer(veaer);});
		selectMapMenu.addItem('Hibrido', function(){cMapController.getMapActive().getMap().setBaseLayer(vehyb);});
		this.oMap.addControl(selectMapMenu);

	},
	inicializarYahoo: function(nro){
		INITIAL_MAP_ZOOM 		= 13;
		// Seteo de proyecciones
		this.projection 		= new OpenLayers.Projection("EPSG:900913");
		this.displayProjection 	= new OpenLayers.Projection("EPSG:4326");

		mapOptions = {
                projection: this.projection,
                displayProjection: this.displayProjection,
                units: "km",
                maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)
        };

       this.oMap = new OpenLayers.Map('map_canvas'+nro, mapOptions);

           	var yahoo = new OpenLayers.Layer.Yahoo(
                "Yahoo Street",
                {'sphericalMercator': true}
            );
            var yahoosat = new OpenLayers.Layer.Yahoo(
                "Yahoo Satellite",
                {'type': YAHOO_MAP_SAT, 'sphericalMercator': true}
            );
            var yahoohyb = new OpenLayers.Layer.Yahoo(
                "Yahoo Hybrid",
                {'type': YAHOO_MAP_HYB, 'sphericalMercator': true}
            );


        this.oMap.addLayers([yahoo, yahoosat, yahoohyb]);

		//selector de tipo de mapa
		var selectMapMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Mapa', width:'100px'});
		selectMapMenu.addItem('Calles', function(){cMapController.getMapActive().getMap().setBaseLayer(yahoo);});
		selectMapMenu.addItem('Satelital', function(){cMapController.getMapActive().getMap().setBaseLayer(yahoosat);});
		selectMapMenu.addItem('Hibrido', function(){cMapController.getMapActive().getMap().setBaseLayer(yahoohyb);});
		this.oMap.addControl(selectMapMenu);

	},
	/************************************************
	 * 				FIJOS							*
	 ***********************************************/
	/**
	 * muestra un fijo en el mapa
	 */
	mostrarFijo	: function(idFijo){
		idFijo = idFijo.toString();
		var pos=indexOfArray(this.fijosVisiblesId,idFijo);
		if (pos==-1){
			//comprobar que no se haya alcanzado el maximo de moviles visibles
			if (this.fijosVisiblesId.length>=misFijos_limitView){
				alert('Se ha alcanzado el limite de fijos que pueden visualizarse al mismo tiempo ('+misFijos_limitView+'). Para mostrar este fijo sera necesario ocultar otro de la lista.')
				return false;
			}
			//visualizar fijo
			this.fijosVisiblesId.push(idFijo);
		//	cMapController.addFijoVisiblesGral(idFijo);
			this.refreshViewMisFijos();
		}
		return true;
	},

	ocultarFijo	: function(idFijo){
		var pos=indexOfArray(this.fijosVisiblesId,idFijo.toString());
		if (pos!=-1){//esta visible
			this.fijosVisiblesId.splice(pos,1);
		//	cMapController.updateFijosVisiblesGral();
			this.refreshViewMisFijos();
		}
		if (idFijo.toString() == this.fijoSelectSelection)
			this.noSeleccionarFijo();
	},

	verFijosSeleccionados	: function(){
		if(this.fijosSeleccionadosId.length > 0){
			this.fijosVisiblesId	= new Array();
			for (var i=0; i<this.fijosSeleccionadosId.length;i++){
				this.fijosVisiblesId[i] = this.fijosSeleccionadosId[i];
				if (i==misFijos_limitView-1){
					alert('Se alcanzo el limite de fijos que pueden visualizarse al mismo tiempo, solo se mostraran los primeros '+misFijos_limitView+' seleccionados.')
					break;
				}
				//cMapController.addFijoVisiblesGral(this.fijosVisiblesId[i]);
			}
			if ( this.fijoSelectSelection != '-1'){
				var pos=indexOfArray(this.fijosVisiblesId, this.fijoSelectSelection);
				if (pos==-1)
					this.fijosVisiblesId.push( this.fijoSelectSelection);
			}
			//cMapController.updateFijosVisiblesGral();
			this.refreshViewMisFijos();
		}
	},

	ocultarFijosSeleccionados: function(){
		var dejardeseleccionar = false;
		for (var i=0;i<this.fijosSeleccionadosId.length;i++){
			var pos=indexOfArray(this.fijosVisiblesId,this.fijosSeleccionadosId[i].toString());
			if (pos!=-1){
				this.fijosVisiblesId.splice(pos,1);
				//cMapController.removeFijoVisiblesGral(this.fijosSeleccionadosId[i].toString());//elimino del general
			}
			if (this.fijosSeleccionadosId[i].toString()==  this.fijoSelectSelection)
				dejardeseleccionar = true;
		}
		//cMapController.updateFijosVisiblesGral();
		this.refreshViewMisFijos();
		if (dejardeseleccionar)
			this.noSeleccionarFijo();
	},
	refreshViewMisFijos: function(){
		if(LOGIN.objetivoDB == 5 || LOGIN.objetivoDB == 1){
			var misFijosList = misFijosHash.values();
			for (var i=0; i<misFijosList.length; i++) {
				if (misFijosList[i]!='toJSONString'){
					var auxId = misFijosList[i].id;
					//VISIBLIDAD
					if (indexOfArray(this.fijosVisiblesId,auxId)!=-1){ // Tiene que estar VISIBLE
						if (FIJ_SIMPLEVIEW)
							this.putSimpleIconFijo(auxId);
						else
							this.putIconFijo(auxId);
					}else { //tiene que estar OCULTO
						if (FIJ_SIMPLEVIEW)
							this.clearSimpleIconFijo(auxId);
						else
							this.clearIconFijo(auxId);
						}
					}
				}
			if (misFijosList.length>0)
			 	printTableMisFijos();
			else
				document.getElementById('divListaFijos').innerHTML = '<span class="inputLBL">No se encontraron fijos registrados.</span>';
		}
	},
	clearIconFijos: function(){
		fijosMarkersArray = this.misFijosMarkersHash.values();
		for (i=0; i<fijosMarkersArray.length; i++){
			this.oMap.removeOverlay(fijosMarkersArray[i]);
		}
		this.misFijosMarkersHash.clear();
	},
	clearIconFijo: function(fijoId){
		//remover el icono del mapa y de las estructuras que conservan la marker
		if (FIJ_SIMPLEVIEW){
			marker = this.misFijosMarkersHash.get(fijoId.toString());
		}else{
			marker = this.misFijosMarkersHash.get(fijoId.toString()+"icon");
		}			
		if (marker != null){
			this.fijosLayer.removeMarker(marker);
			if (FIJ_SIMPLEVIEW){
				this.misFijosMarkersHash.remove(fijoId.toString());
			}else{
				this.misFijosMarkersHash.remove(fijoId.toString()+"icon");
			}
			marker.destroy();
		}
		if ((fijoId.toString()== this.cuentaSelectSegui )&&(this.misFijosSeguiMarker != null)){
			this.fijosLayer.removeMarker(this.misFijosSeguiMarker);
			this.misFijosSeguiMarker = null;
		}
		if ((fijoId.toString()== this.cuentaSelectSelection)&&(this.misFijosSelecMarker != null)){
			this.fijosLayer.removeMarker(this.misFijosSelecMarker);
			this.misFijosSelecMarker = null;
		}
	},
	clearSimpleIconFijo: function(fijoId){
		//remover el icono del mapa y de las estructuras que conservan la feature
		feature = this.misFijosMarkersHash.get(fijoId.toString());
		if (feature != null){
			this.fijosSimpleLayer.removeFeatures([feature]);
			this.misFijosMarkersHash.remove(fijoId.toString());
			feature.destroy();
		}
		marker = this.misFijosMarkersHash.get(fijoId.toString()+"icon");
		if (marker != null){
			this.fijosLayer.removeMarker(marker);
			this.misFijosMarkersHash.remove(fijoId.toString()+"icon");
			marker.destroy();
		}
	},
	createMarkerFijo: function(point, icon, id, mapaId) {
		var html 	= "";
     	var feature = new OpenLayers.Feature(this.fijosLayer, point);
		feature.data.icon = icon;
        feature.closeBox = true;
		feature.popupClass = fijosPopupClass;
        feature.data.overflow = "auto";
        var oFijo = misFijosHash.get(id.toString());
	 	var marker = feature.createMarker();
  	    $j.ajax({
	      type: "POST",
	      url: "querycontroller.php",
	      data: "COMMAND=INFOFIJO&CUENTA="+id+"",
	      success: function(data) {
	      		var dataAux =	jQuery.parseJSON(data);
	        	if (dataAux.length != 'undefined') {
	        		if(dataAux.length >0){
			        	for(var i=0; i < dataAux.length; i++){
							html 	+= 	"<div class='popupGlobal' style='overflow:auto;height:100px'>"+
										"	<div id='fijoInfo_LinksEvento"+dataAux[i].id+"' style='display:none;'>" +
										"		<a href='javascript:;' onclick=''></a>"+
										"	</div>"+
										"	<div class='popupContent' id='fijoInfo_"+dataAux[i].id+"'>"+
										"		<p><b>Cuenta:</b> "+oFijo.id+" "+oFijo.label+"</p>" +
										"		<p><b>Direccion: </b>"+ dataAux[i].direccionMonitoreo +"</p>" +
										"		<p><b>Estado de la cuenta: </b>"+ dataAux[i].estado+"</p>" +
										"	</div>"+
										"	<div id='fijoInfo_Evento"+dataAux[i].id+"' style='display:none;'></div>"+
										"	<div id='fijoInfo_MasEventos"+dataAux[i].id+"' style='display:none;'></div>"+
										"</div>";
							
					  	}
					}else{
						html += "<div style='width:220px;'>No hay datos disponibles.</div>";
					}
			   	}else{
					html += "<div style='width:220px;'>No hay datos disponibles.</div>";
			    }
		        feature.data.popupContentHTML = html;
		        var name = "Cuenta Fija";
		        var markerAnt 		= cMapController.getMapById(mapaId).getMisFijosMarkersHash().get(id.toString()+"icon");
				if (markerAnt != null){
					cMapController.getMapById(mapaId).getFijosLayer().removeMarker(markerAnt);
					//markerAnt.destroy();
				}
				marker.events.register("click", feature,  function() {
					cMapController.getMapById(mapaId).openInfoEvento(point, cMapController.getMapById(mapaId).getInfoMisPuntosEnRutasHTML(name,html));
					if(LOGIN.isBykom){
						var obj = cMapController.getMapById(mapaId).getObjetoMonitorearEventoCliente();
						if(obj!=null && obj.idCuenta.toString() == id.toString()){
							cMapController.getMapById(mapaId).setLinkEventoShow("Info_LinksEvento");
							cMapController.getMapById(mapaId).printInfoEventoSeguimiento(obj,"fijo");
						}
					}
				});
		      	marker.events.register('contextmenu',marker, function(evt) {
		      		clickMap5(mapaId);
					createPopUpFijo(evt, id, icon.imageDiv);
					OpenLayers.Event.stop(evt);
				});
		        cMapController.getMapById(mapaId).getFijosLayer().addMarker(marker);
		        //cMapController.getMapById(mapaId).getFijosLayer().setZIndex(902);
		        cMapController.getMapById(mapaId).getMisFijosMarkersHash().put(id.toString()+"icon", marker);

		      	return marker;
	       }
       });
	},

	/**
	 * Dibuja el icono del fijo en el mapa (vista simple)
	 */
	putSimpleIconFijo: function(fijoId){
		var fijo 		= misFijosHash.get(fijoId.toString());
		if ( (fijo.longitud==null) || (fijo.latitud==null) ){
			return;
		}
       	var point 	= new OpenLayers.Geometry.Point(parseFloat(fijo.longitud),  parseFloat(fijo.latitud)).transform(this.displayProjection, this.projection);
		var feature = this.misFijosMarkersHash.get(fijoId);
		if (feature != null){
			this.fijosSimpleLayer.removeFeatures([feature]);
			feature.destroy();
		}
		feature 	= createMarkerSimpleFijo(point, fijo);

		var pointLonLat = new OpenLayers.LonLat(parseFloat(fijo.longitud),  parseFloat(fijo.latitud)).transform( this.displayProjection,  this.projection);
		var fijo 		= misFijosHash.get(fijoId.toString());
		var radio 		= feature.style.pointRadius;
		switch(radio){
			case 10:
				var keyMovil 	= "25";
				break;
			case 15:
				var keyMovil 	= "33";
				break;
			case 20:
				var keyMovil 	= "40";
				break;
			case 30:
				var keyMovil 	= "65";
				break;
			default:
				var keyMovil 	= "40";
				break;
		}
		var iconFijo 	= mapIcons.getMovilIcon(keyMovil);
		var marker		= this.createMarkerFijo(pointLonLat, iconFijo, fijoId,this.id);

//		this.fijosLayer.addMarker(marker);
//		this.misFijosMarkersHash.put(fijoId.toString()+"icon", marker);
		//this.fijosLayer.setZIndex(909);

		this.misFijosMarkersHash.put(fijoId, feature);
		this.fijosSimpleLayer.addFeatures([feature]);
		this.fijosSimpleLayer.setZIndex(250);
	},
	/**
	 * Dibuja los iconos de los fijos en el mapa
	 */
	putIconFijo: function(fijoId){
		var fijo = misFijosHash.get(fijoId.toString());
		if ( (fijo.longitud==null) || (fijo.latitud==null) ){
			return;
		}
       	var point = new OpenLayers.LonLat(parseFloat(fijo.longitud),  parseFloat(fijo.latitud)).transform( this.displayProjection,  this.projection);

		var keyFijo 	= "ico_casa.png";
		if ((parseInt(fijo.activo)==0)&&(parseInt(LOGIN.objetivoDB)!=2)){
			keyFijo = keyFijo + '_OUT';
		}
		var iconFijo 	= mapIcons.getFijoIcon(keyFijo);
		var marker 		= this.misFijosMarkersHash.get(fijoId);
		if (marker != null){
			this.fijosLayer.removeMarker(marker);
			marker.destroy();
		}
		marker			= this.createMarkerFijo(point, iconFijo, fijoId, this.id);
	},

	vehiculoOnClick : function (evt, movilId){
		cMapController.getMapById(this.id).seleccionarMovil(movilId);
		cleanAllStates();
		if(this.menuOpcion	!= "seleccionActual"){
    		clickOpcionAcordeon("seleccionActual");
		}
    	RefreshForm();
        OpenLayers.Event.stop(evt);
	},

	localizarFijo: function(fijoId){
		fijoId = fijoId.toString();
		this.mostrarFijo(fijoId);
		var posifijo = misFijosHash.get(fijoId);
		if( (posifijo.latitud != "" &&  posifijo.longitud!="") && (posifijo.latitud!=null && posifijo.longitud!=null) ){
			this.centrar(posifijo.latitud, posifijo.longitud);
			this.putHighlightCircle(new OpenLayers.LonLat(parseFloat(posifijo.longitud), parseFloat(posifijo.latitud)).transform(this.displayProjection, this.projection));
		}else{
			alert('Se desconocen reportes de posicionamiento del fijo que desea localizar.');
		}
	},
	/************************************************
	 * 				VEHICULOS						*
	 ***********************************************/
	refreshMovilSelection: function() {
		var divId = "data_movil_selection";
		if (this.cuentaSelectSelection == '-1') {
			hideDiv(divId);
			showDiv('data_movil_unSelection');
			return;
		}
		hideDiv('data_movil_unSelection');
		showDiv(divId);
		if(misVehiculosHash.containsKey(this.cuentaSelectSelection)){
			var movil = misVehiculosHash.get(this.cuentaSelectSelection);
			var grupo = misGruposVehiculosHash.get(movil.grupoId.toString());
			var grupoText = "";
			if (grupo != null)
				grupoText = ' ('+grupo.nombre.toUpperCase()+')';
			document.getElementById("movilSelectionId").innerHTML = movil.label+grupoText;
			document.getElementById("movilSelectionPatente").innerHTML = movil.patente;
			if (movil.POSIMOVIL!=null){
				hideDiv('seleccionMovilesTEXTmsg');
				document.getElementById("movilSelectionLatitud").innerHTML = movil.POSIMOVIL.latitud;
				document.getElementById("movilSelectionLongitud").innerHTML = movil.POSIMOVIL.longitud;
				document.getElementById("movilSelectionVelocidad").innerHTML = movil.POSIMOVIL.velocidad;
				document.getElementById("movilSelectionAproximacion").innerHTML = movil.POSIMOVIL.direccionAbrev;
				var myDate = new MyDate(movil.POSIMOVIL.fechaMensaje);
				document.getElementById("movilSelectionFechaMensaje").innerHTML = myDate.elegantFormat();
				document.getElementById("movilSelectionSentidoPalabra").innerHTML = obtenerPalabraSentido(movil.POSIMOVIL.sentido);
				document.getElementById("movilSelectionSatelites").innerHTML = movil.POSIMOVIL.satelites;
				var eventoDetalle = "";
				if(movil.POSIMOVIL.eventoDetalle!=null){
					eventoDetalle = "-"+movil.POSIMOVIL.eventoDetalle;
				}
				document.getElementById("movilSelectionEvento").innerHTML = movil.POSIMOVIL.evento+eventoDetalle;

				if (movil.POSIMOVIL.contactoMotor == null || movil.POSIMOVIL.contactoMotor == '') {
					document.getElementById("movilSeleccionContactoMotor").innerHTML = "Desconocido";
				} else if (movil.POSIMOVIL.contactoMotor == 1) {
					document.getElementById("movilSeleccionContactoMotor").innerHTML = "Encendido";
				} else {
					document.getElementById("movilSeleccionContactoMotor").innerHTML = "Apagado";
				}

				if (movil.POSIMOVIL.alimentacion == null || movil.POSIMOVIL.alimentacion == '') {
					document.getElementById("movilSeleccionAlimentacion").innerHTML = "Desconocido";
				} else if (movil.POSIMOVIL.alimentacion == 1) {
					document.getElementById("movilSeleccionAlimentacion").innerHTML = "Conectada";
				} else {
					document.getElementById("movilSeleccionAlimentacion").innerHTML = "Desconectada";
				}

				if (movil.POSIMOVIL.bateriaPrincipal == null || movil.POSIMOVIL.bateriaPrincipal == '') {
					document.getElementById("movilSeleccionBateriaPrincipal").innerHTML = "Desconocido";
				} else {
					document.getElementById("movilSeleccionBateriaPrincipal").innerHTML = movil.POSIMOVIL.bateriaPrincipal;
				}

				if (movil.POSIMOVIL.bateriaSecundaria == null || movil.POSIMOVIL.bateriaSecundaria == '') {
					document.getElementById("movilSeleccionBateriaSecundaria").innerHTML = "Desconocido";
				} else {
					document.getElementById("movilSeleccionBateriaSecundaria").innerHTML = movil.POSIMOVIL.bateriaSecundaria;
				}

				if((VEH_SIMPLEVIEW!=1)&&(this.misVehiculosMarkersHash.containsKey(movil.id.toString()))){
					urlImgMovil = this.misVehiculosMarkersHash.get(movil.id.toString()).icon.url;
					urlImgSentido = this.misVehiculosSentidoHash.get(movil.id.toString()).icon.url;
					document.getElementById("movilSelectionSentidoImg").style.backgroundImage = "url("+urlImgSentido+")";
					document.getElementById("movilSelectionImg").style.backgroundImage = "url('"+urlImgMovil+"')";
					$j("#iconoMovilSelection").show();
				}
				//Imprime el icono OK si la posicion es valida o ERROR si es invalida
				if (movil.POSIMOVIL.edadMensaje >=255) {
					document.getElementById("movilSelectionStatusDiv").style.display = "block";
					document.getElementById('movilSelectionPosicionInvalidaTR').style.display = "block";
					document.getElementById('movilSelectionPosicionInvalida').innerHTML = "Posici&oacute;n no v&aacute;lida";

				} else {
					document.getElementById('movilSelectionPosicionInvalidaTR').style.display = "none";
					document.getElementById("movilSelectionStatusDiv").style.display = "none";
				}

				if ((movil.POSIMOVIL.tiempoMensaje/60) > TIEMPO_LIMITE_MENSAJE) {
					$j("#movilSelectionTimeDiv").show();
					$j("#movilSelectionPosicionDesactualizadaTR").show();
					$j("#movilSelectionPosicionDesactualizada").html("Posicion sin actualizaci&oacute;n reciente.");
				}else{
					$j("#movilSelectionTimeDiv").hide();
					$j("#movilSelectionPosicionDesactualizadaTR").hide();
					$j("#movilSelectionPosicionDesactualizada").html("");
				}
				document.getElementById("movilSelectionOdometroParcial").innerHTML = movil.POSIMOVIL.odometroParcial;
				document.getElementById("movilSelectionOdometroTotal").innerHTML = movil.POSIMOVIL.odometroTotal;
				document.getElementById("movilSelectionRpm").innerHTML = movil.POSIMOVIL.rpm;

				if (movil.POSIMOVIL.zonaHorariaId != "") {
					showDiv('movilSelectionZonaHorariaDIV');
					document.getElementById("movilSelectionZonaHoraria").innerHTML = movil.POSIMOVIL.zonaHorariaLabel;
				} else {
					hideDiv('movilSelectionZonaHorariaDIV');
				}

				$j("#movilSelectionCaudalimetro").html("");
				if(movil.controlaCaudalimetro==1){
					$j("#caudalimetroSeleccion").show();
					if(movil.POSIMOVIL.consumoActual){
						$j("#movilSelectionCaudalimetro").html(movil.POSIMOVIL.consumoActual + "Lts - " + dateMYSQLToDate2(movil.POSIMOVIL.consumoActualFecha));
					}else{
						$j("#movilSelectionCaudalimetro").html("Sin datos.");
					}
				}else{
					$j("#caudalimetroSeleccion").hide();
				}
				$j("#movilSelectionTemperaturaMotor").html("");
				if(movil.controlaTemperaturaMotor==1){
					$j("#temperaturaMotorSeleccion").show();
					if(movil.POSIMOVIL.temperaturaMotor){
						$j("#movilSelectionTemperaturaMotor").html(movil.POSIMOVIL.temperaturaMotor + "&#176; - " + dateMYSQLToDate2(movil.POSIMOVIL.temperaturaMotorFecha) );
					}else{
						$j("#movilSelectionTemperaturaMotor").html("Sin datos.");
					}
				}else{
					$j("#temperaturaMotorSeleccion").hide();
				}
				$j("#movilSelectionTemperaturaCarga").html("");
				if(movil.controlaTemperaturaCarga==1){
					$j("#temperaturaCargaSeleccion").show();
					if(movil.POSIMOVIL.temperaturaCarga){
						$j("#movilSelectionTemperaturaCarga").html(movil.POSIMOVIL.temperaturaCarga + "&#176; - " + dateMYSQLToDate2(movil.POSIMOVIL.temperaturaCargaFecha));
					}else{
						$j("#movilSelectionTemperaturaCarga").html("Sin datos.");
					}
				}else{
					$j("#temperaturaCargaSeleccion").hide();
				}

				$j("#movilSelectionPrepanico").html("");
				if(movil.controlaPrepanico != -1){
					var controlaPrepanico = movil.POSIMOVIL.digitales.charAt(movil.controlaPrepanico);
					if(movil.SENSORES.prepanico.factor == 0){
						controlaPrepanico = controlaPrepanico==1 ? 0:1;
					}
					var textPrepanico = "";
					if(controlaPrepanico == 1){//activado o presionado
						textPrepanico = movil.SENSORES.prepanico.maximo;
					}else{//desactivado o normal
						textPrepanico = movil.SENSORES.prepanico.minimo;
					}
					$j("#movilSelectionPrepanico").html(textPrepanico);
					$j("#prepanicoSeleccion").show();
				}else{
					$j("#prepanicoSeleccion").hide();
				}

				$j("#movilSelectionLibreOcupado").html("");
				if(movil.controlaLibreOcupado != -1){
					var controlaLibreOcupado = movil.POSIMOVIL.digitales.charAt(movil.controlaLibreOcupado);
					if(movil.SENSORES.libreOcupado.factor == 0){
						controlaLibreOcupado = controlaLibreOcupado==1 ? 0:1;
					}
					if(controlaLibreOcupado == 1){
						$j("#movilSelectionLibreOcupado").html(movil.SENSORES.libreOcupado.maximo);
					}else{
						$j("#movilSelectionLibreOcupado").html(movil.SENSORES.libreOcupado.minimo);
					}
					$j("#libreOcupadoSeleccion").show();
				}else{
					$j("#libreOcupadoSeleccion").hide();
				}

			}else{
				document.getElementById("seleccionMovilesTEXTmsg").innerHTML = "<b>ATENCION:</b> El movil que se encuentra en seleccion aun no registro reportes de posicionamiento."
				showDiv('seleccionMovilesTEXTmsg');
				}
		}

	},
	refreshMovilSeguimiento:function() {
		if (this.cuentaSelectSegui == '-1') {
			hideDiv('data_movil_seguimiento');
			showDiv('data_movil_unSeguimiento');
			return;
		}
		hideDiv('data_movil_unSeguimiento');
		showDiv('data_movil_seguimiento');
		if(misVehiculosHash.containsKey(this.cuentaSelectSegui)){
			//imprimirEstelaSeguimiento();
			var movil = misVehiculosHash.get(this.cuentaSelectSegui);
			var grupo = misGruposVehiculosHash.get(movil.grupoId.toString());
			var grupoText = "";
			if (grupo != null)
				grupoText = ' ('+grupo.nombre.toUpperCase()+')';
			document.getElementById("movilSeguimientoId").innerHTML = movil.label+grupoText;
			document.getElementById("movilSeguimientoPatente").innerHTML = movil.patente;
			if (( VEH_SIMPLEVIEW!=1 )&&(this.cuentaSelectSelection.toString()==movil.id.toString())&&(this.misVehiculosSelecMarker!=null)){
				//vehiculosLayer.removeMarker(misVehiculosSelecMarker);
				this.vehiculosLayer.removeMarker(this.misVehiculosSelecMarker);
				this.misVehiculosSelecMarker=null;
			}
			if (movil.POSIMOVIL!=null){
				hideDiv('seguimientoMovilesTEXTmsg');
				document.getElementById("movilSeguimientoLatitud").innerHTML = movil.POSIMOVIL.latitud;
				document.getElementById("movilSeguimientoLongitud").innerHTML = movil.POSIMOVIL.longitud;
				document.getElementById("movilSeguimientoVelocidad").innerHTML = movil.POSIMOVIL.velocidad;
				document.getElementById("movilSeguimientoAproximacion").innerHTML = movil.POSIMOVIL.direccionAbrev;
				var myDate = new MyDate(movil.POSIMOVIL.fechaMensaje);
				document.getElementById("movilSeguimientoFechaMensaje").innerHTML =  myDate.elegantFormat();
				document.getElementById("movilSeguimientoSentidoPalabra").innerHTML = obtenerPalabraSentido(movil.POSIMOVIL.sentido);
				document.getElementById("movilSeguimientoSatelites").innerHTML = movil.POSIMOVIL.satelites;
				var eventoDetalle = "";
				if(movil.POSIMOVIL.eventoDetalle!=null){
					eventoDetalle = "-"+movil.POSIMOVIL.eventoDetalle;
				}
				document.getElementById("movilSeguimientoEvento").innerHTML = movil.POSIMOVIL.evento+eventoDetalle;

				document.getElementById("movilSeguimientoOdometroParcial").innerHTML = movil.POSIMOVIL.odometroParcial;
				document.getElementById("movilSeguimientoOdometroTotal").innerHTML = movil.POSIMOVIL.odometroTotal;
				document.getElementById("movilSeguimientoRpm").innerHTML = movil.POSIMOVIL.rpm;

				if (movil.POSIMOVIL.contactoMotor == null || movil.POSIMOVIL.contactoMotor == '') {
					document.getElementById("movilSeguimientoContactoMotor").innerHTML = "Desconocido";
				} else if (movil.POSIMOVIL.contactoMotor == 1) {
					document.getElementById("movilSeguimientoContactoMotor").innerHTML = "Encendido";
				} else {
					document.getElementById("movilSeguimientoContactoMotor").innerHTML = "Apagado";
				}

				if (movil.POSIMOVIL.alimentacion == null || movil.POSIMOVIL.alimentacion == '') {
					document.getElementById("movilSeguimientoAlimentacion").innerHTML = "Desconocido";
				} else if (movil.POSIMOVIL.alimentacion == 1) {
					document.getElementById("movilSeguimientoAlimentacion").innerHTML = "Conectada";
				} else {
					document.getElementById("movilSeguimientoAlimentacion").innerHTML = "Desconectada";
				}

				if (movil.POSIMOVIL.bateriaPrincipal == null || movil.POSIMOVIL.bateriaPrincipal == '') {
					document.getElementById("movilSeguimientoBateriaPrincipal").innerHTML = "Desconocido";
				} else {
					document.getElementById("movilSeguimientoBateriaPrincipal").innerHTML = movil.POSIMOVIL.bateriaPrincipal;
				}

				if (movil.POSIMOVIL.bateriaSecundaria == null || movil.POSIMOVIL.bateriaSecundaria == '') {
					document.getElementById("movilSeguimientoBateriaSecundaria").innerHTML = "Desconocido";
				} else {
					document.getElementById("movilSeguimientoBateriaSecundaria").innerHTML = movil.POSIMOVIL.bateriaSecundaria;
				}


				if((VEH_SIMPLEVIEW!=1)&&(this.misVehiculosMarkersHash.containsKey(movil.id.toString()))){
					urlImgMovil = this.misVehiculosMarkersHash.get(movil.id.toString()).icon.url;
					urlImgSentido = this.misVehiculosSentidoHash.get(movil.id.toString()).icon.url;
					document.getElementById("movilSeguimientoSentidoImg").style.backgroundImage = "url("+urlImgSentido+")";
					document.getElementById("movilSeguimientoImg").style.backgroundImage = "url('"+urlImgMovil+"')";
					$j("#iconoMovilSeguimiento").show();

				}
				//Imprime el icono OK si la posicion es valida o ERROR si es invalida
				if (movil.POSIMOVIL.edadMensaje >=255) {
					document.getElementById("movilSeguimientoStatusDiv").style.display = "block";
					document.getElementById('movilSeguimientoPosicionInvalidaTR').style.display = "block";
					document.getElementById('movilSeguimientoPosicionInvalida').innerHTML = "Posici&oacute;n no v&aacute;lida.";
				} else {
					document.getElementById('movilSeguimientoPosicionInvalidaTR').style.display = "none";
					document.getElementById("movilSeguimientoStatusDiv").style.display = "none";
				}

				if ((movil.POSIMOVIL.tiempoMensaje/60) > TIEMPO_LIMITE_MENSAJE) {
					$j("#movilSeguimientoTimeDiv").show();
					$j("#movilSeguimientoPosicionDesactualizadaTR").show();
					$j("#movilSeguimientoPosicionDesactualizada").html("Posicion sin actualizaci&oacute;n reciente.");
				}else{
					$j("#movilSeguimientoPosicionDesactualizadaTR").hide();
					$j("#movilSeguimientoPosicionDesactualizada").html("");
					$j("#movilSeguimientoTimeDiv").hide();
				}

				if (movil.POSIMOVIL.zonaHorariaId != "") {
					showDiv('movilSeguimientoZonaHorariaDIV');
					document.getElementById("movilSeguimientoZonaHoraria").innerHTML = movil.POSIMOVIL.zonaHorariaLabel;
				} else {
					hideDiv('movilSeguimientoZonaHorariaDIV');
				}

				if(movil.controlaCaudalimetro==1){
					$j("#caudalimetroSeguimiento").show();
					if(movil.POSIMOVIL.consumoActual){
						$j("#movilSeguimientoCaudalimetro").html(movil.POSIMOVIL.consumoActual + "Lts - " + dateMYSQLToDate2(movil.POSIMOVIL.consumoActualFecha));
					}else{
						$j("#movilSeguimientoCaudalimetro").html("Sin datos.");
					}
				}else{
					$j("#caudalimetroSeguimiento").hide();
				}
				$j("#movilSeguimientoTemperaturaMotor").html("");
				if(movil.controlaTemperaturaMotor==1){
					$j("#temperaturaMotorSeguimiento").show();
					if(movil.POSIMOVIL.temperaturaMotor){
						$j("#movilSeguimientoTemperaturaMotor").html(movil.POSIMOVIL.temperaturaMotor + "&#176; - " + dateMYSQLToDate2(movil.POSIMOVIL.temperaturaMotorFecha) );
					}else{
						$j("#movilSeguimientoTemperaturaMotor").html("Sin datos.");
					}
				}else{
					$j("#temperaturaMotorSeguimiento").hide();
				}
				$j("#movilSeguimientoTemperaturaCarga").html("");
				if(movil.controlaTemperaturaCarga==1){
					$j("#temperaturaCargaSeguimiento").show();
					if(movil.POSIMOVIL.temperaturaCarga){
						$j("#movilSeguimientoTemperaturaCarga").html(movil.POSIMOVIL.temperaturaCarga + "&#176; - " + dateMYSQLToDate2(movil.POSIMOVIL.temperaturaCargaFecha));
					}else{
						$j("#movilSeguimientoTemperaturaCarga").html("Sin datos.");
					}
				}else{
					$j("#temperaturaCargaSeguimiento").hide();
				}
				if(movil.controlaPrepanico != -1){
					var controlaPrepanico = movil.POSIMOVIL.digitales.charAt(movil.controlaPrepanico);
					if(movil.SENSORES.prepanico.factor == 0){
						controlaPrepanico = controlaPrepanico==1 ? 0:1;
					}
					if(controlaPrepanico == 1 ){
						$j("#movilSeguimientoPrepanico").html(movil.SENSORES.prepanico.maximo);
					}else{
						$j("#movilSeguimientoPrepanico").html(movil.SENSORES.prepanico.minimo);
					}
					$j("#controlaPrepanicoSeguimiento").show();
				}else{
					$j("#controlaPrepanicoSeguimiento").hide();
				}

				if(movil.controlaLibreOcupado != -1){
					var controlaLibreOcupado = movil.POSIMOVIL.digitales.charAt(movil.controlaLibreOcupado);
					if(movil.SENSORES.libreOcupado.factor == 0){
						controlaLibreOcupado = controlaLibreOcupado==1 ? 0:1;
					}
					if(controlaLibreOcupado == 1){
						$j("#movilSeguimientoLibreOcupado").html(movil.SENSORES.libreOcupado.maximo);
					}else{
						$j("#movilSeguimientoLibreOcupado").html(movil.SENSORES.libreOcupado.minimo);
					}
					$j("#libreOcupadoSeguimiento").show();
				}else{
					$j("#libreOcupadoSeguimiento").hide();
				}

				var lonlat = new OpenLayers.LonLat(parseFloat(movil.POSIMOVIL.longitud), parseFloat(movil.POSIMOVIL.latitud)).transform(this.displayProjection,this.projection);
				this.oMap.panTo(lonlat);
			}else{
				document.getElementById("seguimientoMovilesTEXTmsg").innerHTML = "<b>ATENCION:</b> El movil que se encuentra en seguimiento aun no registro reportes de posicionamiento."
				showDiv('seguimientoMovilesTEXTmsg');
			}
		}else{
			hideDiv('data_movil_seguimiento');
			showDiv('data_movil_unSeguimiento');
		}
	},
	createMarker: function(point, icon, id) {
		var feature = new OpenLayers.Feature(this.vehiculosLayer , point);
		feature.data.icon = icon;
		var marker 	= feature.createMarker();
		var mapaId 	= this.id;
		if(LOGIN.isBykom){
			var obj = cMapController.getMapById(mapaId).getObjetoMonitorearEventoCliente();
			if(obj!=null && (obj.idMovilAsignado == id || obj.idCuenta.toString() == id.toString() ) )
			{
				var movil 	= misVehiculosHash.get(id.toString());
				var html 	= "";
				if(movil != null){
					var name 	= "Cuenta Movil";
					html 	+= 	"<div class='popupGlobal' style='overflow:auto;height:100px'>"+
								"	<div id='movilInfo_LinksEvento"+id+"' style='display:none;'>" +
								"		<a href='javascript:;' onclick=''></a>"+
								"	</div>"+
								"	<div class='popupContent' id='movilInfo_"+id+"'>"+
								"		<p><b>Cuenta:</b> "+id+" "+movil.label+ " ("+movil.identificador+" "+movil.patente +")"+"</p>" +
								"		<p><b>Direcci&oacute;n: </b>"+movil.POSIMOVIL.direccionAbrev +"</p>" +
								"	</div>"+
								"	<div id='movilInfo_Evento"+id+"' style='display:none;'></div>"+
								"	<div id='movilInfo_MasEventos"+id+"' style='display:none;'></div>"+
								"</div>";
				}
			}
		}
		marker.events.register('click', feature ,function(evt) {
			clickMap5(mapaId);
			if(LOGIN.isBykom){
				if(obj!=null && (obj.idMovilAsignado == id || obj.idCuenta.toString() == id.toString())){
					cMapController.getMapById(mapaId).setLinkEventoShow("Info_LinksEvento");
					cMapController.getMapById(mapaId).openInfoEvento(point, cMapController.getMapById(mapaId).getInfoMisPuntosEnRutasHTML(name,html));
					cMapController.getMapById(mapaId).printInfoEventoSeguimiento(obj,"movil");
				}
			}
			vehiculoOnClick(evt, id);
        });
		marker.events.register('contextmenu', marker, function(evt) {
			clickMap5(mapaId);
			createPopUpMovil(evt, id, icon.imageDiv);
			OpenLayers.Event.stop(evt);
		});
  		return marker;
	},
	clearIconCars: function(){
		vehiculosMarkersArray = this.misVehiculosMarkersHash.values();
		vehiculosMarkersSentido = this.misVehiculosSentidoHash.values();
		for (i=0; i<vehiculosMarkersArray.length; i++){
			this.oMap.removeOverlay(vehiculosMarkersArray[i]);
			this.oMap.removeOverlay(vehiculosMarkersSentido[i]);
		}
		this.misVehiculosMarkersHash.clear();
		this.misVehiculosSentidoHash.clear();
	},

	clearIconCar: function(movilId){
		//remover el icono del mapa y de las estructuras que conservan la marker
		marker = this.misVehiculosMarkersHash.get(movilId.toString());
		if (marker != null){
			this.vehiculosLayer.removeMarker(marker);
			this.vehiculosLayer.removeMarker(this.misVehiculosSentidoHash.get(movilId.toString()));
			this.misVehiculosMarkersHash.remove(movilId.toString());
			this.misVehiculosSentidoHash.remove(movilId.toString());
			marker.destroy();
		}
		var markerPrepanico = this.misVehiculosMarkersHash.get(movilId.toString()+"_PP");
		if (markerPrepanico != null){
			this.vehiculosLayer.removeMarker(markerPrepanico);
			this.misVehiculosMarkersHash.remove(movilId.toString()+"_PP");
			markerPrepanico.destroy();
		}
		if ((movilId.toString()== this.cuentaSelectSegui )&&(this.misVehiculosSeguiMarker != null)){
			this.vehiculosLayer.removeMarker(this.misVehiculosSeguiMarker);
			this.misVehiculosSeguiMarker = null;
		}
		if ((movilId.toString()== this.cuentaSelectSelection)&&(this.misVehiculosSelecMarker != null)){
			this.vehiculosLayer.removeMarker(this.misVehiculosSelecMarker);
			this.misVehiculosSelecMarker = null;
		}
	},
	clearSimpleIconCar: function(movilId){
		//remover el icono del mapa y de las estructuras que conservan la feature
		feature = this.misVehiculosMarkersHash.get(movilId.toString());
		if (feature != null){
			this.vehiculosSimpleLayer.removeFeatures([feature]);
			this.misVehiculosMarkersHash.remove(movilId.toString());
			feature.destroy();
		}
		marker = this.misVehiculosMarkersHash.get(movilId.toString()+"icon");
		if (marker != null){
			this.vehiculosLayer.removeMarker(marker);
			this.misVehiculosMarkersHash.remove(movilId.toString()+"icon");
			marker.destroy();
		}
		var markerSentido = this.misVehiculosSentidoHash.get(movilId.toString());
		if (markerSentido != null){
			this.vehiculosSentidosSimpleLayer.removeMarker(markerSentido);
			//markerSentido.destroy();
		}
		var markerPrepanico = this.misVehiculosMarkersHash.get(movilId.toString()+"_PP");
		if (markerPrepanico != null){
			this.vehiculosLayer.removeMarker(markerPrepanico);
			this.misVehiculosMarkersHash.remove(movilId.toString()+"_PP");
			markerPrepanico.destroy();
		}
	},
	/**
	 * Dibuja los iconos de los moviles en el mapa
	 */
	putIconCar: function(carId){
		var car = misVehiculosHash.get(carId.toString());
		if ((car.POSIMOVIL==null)||(parseInt(car.POSIMOVIL.tienePosicionActual)==0)){
			return;
		}
       	var point = new OpenLayers.LonLat(parseFloat(car.POSIMOVIL.longitud),  parseFloat(car.POSIMOVIL.latitud)).transform( this.displayProjection,  this.projection);

		if ((this.cuentaSelectSegui.toString()=='-1')&&(this.misVehiculosSeguiMarker!=null)){
			this.vehiculosLayer.removeMarker(this.misVehiculosSeguiMarker);
			this.misVehiculosSeguiMarker.destroy();
			this.misVehiculosSeguiMarker=null;
		}

		//alert(this.cuentaSelectSelection.toString()+ " **** "+this.misVehiculosSelecMarker);
		if (( this.cuentaSelectSelection.toString()=='-1')&&(this.misVehiculosSelecMarker!=null)){
			this.vehiculosLayer.removeMarker(this.misVehiculosSelecMarker);
			this.misVehiculosSelecMarker.destroy();
			this.misVehiculosSelecMarker=null;
		}

		if (car.id == this.cuentaSelectSegui){//en seguimiento?
			if (this.misVehiculosSeguiMarker!=null) {
				this.vehiculosLayer.removeMarker(this.misVehiculosSeguiMarker);
				this.misVehiculosSeguiMarker.destroy();
			}
			this.misVehiculosSeguiMarker = createMarkerSentido(point, mapIcons.getSeguimientoIcon());
			this.vehiculosLayer.addMarker(this.misVehiculosSeguiMarker);
		}else if (car.id ==  this.cuentaSelectSelection){ //en seleccion?
			if (this.misVehiculosSelecMarker!=null) {
				this.vehiculosLayer.removeMarker(this.misVehiculosSelecMarker);
				this.misVehiculosSelecMarker.destroy();
			}
			this.misVehiculosSelecMarker = createMarkerSentido(point, mapIcons.getSeleccionadoIcon());
			this.vehiculosLayer.addMarker(this.misVehiculosSelecMarker);
		}
		var keySentido 	= obtenerLabelSentido(car.POSIMOVIL.sentido);
		if(car.controlaLibreOcupado!=-1){//controla ocupado/Libre
			var controlaLO = car.POSIMOVIL.digitales.charAt(car.controlaLibreOcupado);
			if(car.SENSORES.libreOcupado.factor == 0){
				controlaLO  = (controlaLO ==1) ? 0:1;
			}
			if(controlaLO == 0){
				var keyMovil 	= "TAXILIBRE";
			}else{
				var keyMovil 	= "TAXIOCUP";
			}
			if ((parseInt(car.activo)==0)&&(parseInt(LOGIN.objetivoDB)!=2)){
				keySentido 	= keySentido+'_OUT';
				keyMovil  	= keyMovil+"_OUT";
			}else{
				keySentido 	= (eval(car.POSIMOVIL.velocidad) == 0) ? keySentido+"_OUT" : keySentido+"_Active";
			}
		}else{
			var keyMovil 	= car.tipoAvl.toString();
			if ((parseInt(car.activo)==0)&&(parseInt(LOGIN.objetivoDB)!=2)){
				keySentido = keySentido+'_OUT';
				keyMovil = keyMovil + '_OUT';
			}else{
				keySentido = (eval(car.POSIMOVIL.velocidad) == 0) ? keySentido+"_OUT" : keySentido+"_Active";
			}
		}
		
		/**
		 * si tiene el motor apagado se usa el color ROJO
		 */
		if (car.POSIMOVIL.contactoMotor != null && car.POSIMOVIL.contactoMotor != '') {
			if(eval(car.POSIMOVIL.contactoMotor) == 0){
				var keySentido 	= obtenerLabelSentido(car.POSIMOVIL.sentido);
				if ((parseInt(car.activo)==0)&&(parseInt(LOGIN.objetivoDB)!=2)){
					keySentido = keySentido+'_OUT';
				}else{
					keySentido = keySentido+"_Inactive";
				}
			}
		}

		var iconSentido = mapIcons.getSentidoIcon(keySentido);
		var iconMovil 	= mapIcons.getMovilIcon(keyMovil);
		var marker 		= this.misVehiculosMarkersHash.get(carId);
		if (marker != null){
			var markerSentido = this.misVehiculosSentidoHash.get(carId);
			this.vehiculosLayer.removeMarker(markerSentido);
			this.vehiculosLayer.removeMarker(marker);
			marker.destroy();
			markerSentido.destroy();
		}
		markerSentido 	= createMarkerSentido(point, iconSentido);
		marker			= this.createMarker(point, iconMovil, carId);

		var markerPrepanico = this.misVehiculosMarkersHash.get(carId+"_PP");
		if(markerPrepanico!=null){
			this.misVehiculosMarkersHash.remove(carId.toString()+"_PP");
			this.vehiculosLayer.removeMarker(markerPrepanico);
			markerPrepanico.destroy();
		}

		if(car.controlaPrepanico!=-1){//controla prepanico
			var controlaPreP = car.POSIMOVIL.digitales.charAt(car.controlaPrepanico);
			if(car.SENSORES.prepanico.factor == 0){
				controlaPreP = (controlaPreP==1) ? 0:1;
			}
			if(controlaPreP == 1){//Presionado
				var keyPrepanico 	= "PREPANICO40";
				var iconMovilPrepanico 	= mapIcons.getMovilIcon(keyPrepanico);
				markerPrepanico	= this.createMarker(point, iconMovilPrepanico, carId);
				this.misVehiculosMarkersHash.put(carId+"_PP", markerPrepanico);
				this.vehiculosLayer.addMarker(markerPrepanico);
			}
		}

		this.misVehiculosMarkersHash.put(carId, marker);
		this.misVehiculosSentidoHash.put(carId, markerSentido);
		this.vehiculosLayer.addMarker(markerSentido);
		this.vehiculosLayer.addMarker(marker);
	},
	createMarkerSimple: function(point, movil){
		var transparencia = VEH_TRANSPARENCIA;
		var strokeColor = "#EFEFEF";//color del borde
		var fillColor = "#00FF00";//color del relleno verde
		if ((!parseInt(movil.activo))&&(parseInt(LOGIN.objetivoDB)!=2)){
			//fillColor = "#8E8E8E";//gris
			fillColor = "#CCCCCC";//gris
			strokeColor = "#6A6A6A";//gris oscuro
			transparencia = 1;
		}else{
			if((movil.POSIMOVIL!=null)&&(parseInt(movil.POSIMOVIL.velocidad)==0)){
				//fillColor = "#FF7070";//rojo
				fillColor = "#8E8E8E";//gris
			}
			/**
			 * si tiene el motor apagado se usa el color ROJO
			 */
			if (movil.POSIMOVIL.contactoMotor != null && movil.POSIMOVIL.contactoMotor != '') {
				if(eval(movil.POSIMOVIL.contactoMotor) == 0){
					fillColor = "#FF7070";//rojo
				}
			}
			if (movil.id.toString()== this.cuentaSelectSegui){
				//strokeColor = "#FF8000";//rojo mas oscuro
				strokeColor = "#FF00CC";//violeta
			}else if(movil.id.toString()== this.cuentaSelectSelection)
					strokeColor = "#4040FF";//azul
		}
		
		var labelSimple = movil.labelSimple;
		if(movil.controlaLibreOcupado!=-1){//controla ocupado/Libre
			var controlaLO = movil.POSIMOVIL.digitales.charAt(movil.controlaLibreOcupado);
			if(movil.SENSORES.libreOcupado.factor == 0){
				controlaLO  = (controlaLO ==1) ? 0:1;
			}
			if(controlaLO == 0){
				labelSimple = movil.labelSimple + " - "+ movil.SENSORES.libreOcupado.minimo;
			}else{
				labelSimple = movil.labelSimple + " - "+ movil.SENSORES.libreOcupado.maximo;
			}
		}
		var movilFeature = new OpenLayers.Feature.Vector(point,null,{
            strokeColor: strokeColor,
			fillColor: fillColor,
			fillOpacity: transparencia,
            strokeWidth: 3,
			fontColor: VEH_LBLCOLOR,
			pointRadius: VEH_RADIO,
			fontFamily: 'Verdana',
			fontSize: VEH_LBLSIZE,
			label: labelSimple,
			fontWeight: 'bold',
			cursor:'pointer',
			labelAlign: 'cm',
			labelSelect: true
        });
		movilFeature.attributes = {movilId: movil.id, oPoint: point};
		return movilFeature;
	},
	/**
	 * Dibuja el icono del movil en el mapa (vista simple)
	 */
	putSimpleIconCar: function(carId){
		var car = misVehiculosHash.get(carId.toString());
		if ((car.POSIMOVIL==null)||(parseInt(car.POSIMOVIL.tienePosicionActual)==0)){
			return;
		}
       	var point   = new OpenLayers.Geometry.Point(parseFloat(car.POSIMOVIL.longitud),  parseFloat(car.POSIMOVIL.latitud)).transform(this.displayProjection, this.projection);
		var feature = this.misVehiculosMarkersHash.get(carId);
		if (feature != null){
			this.vehiculosSimpleLayer.removeFeatures([feature]);
			feature.destroy();
		}
		feature = this.createMarkerSimple(point, car);
		marker  = this.misVehiculosMarkersHash.get(carId.toString()+"icon");
		if (marker != null){
			this.vehiculosLayer.removeMarker(marker);
			this.misVehiculosMarkersHash.remove(carId.toString()+"icon");
			marker.destroy();

			var markerSentido = this.misVehiculosSentidoHash.get(carId);
			this.vehiculosSentidosSimpleLayer.removeMarker(markerSentido);
			markerSentido.destroy();
		}

		var pointLonLat = new OpenLayers.LonLat(parseFloat(car.POSIMOVIL.longitud),  parseFloat(car.POSIMOVIL.latitud)).transform( this.displayProjection,  this.projection);
		var car 		= misVehiculosHash.get(carId.toString());
		var radio 		= feature.style.pointRadius;
		switch(radio){
			case 10:
				var keyMovil 	= "25";
				var keyPrepanico 	= "PREPANICO25";
				break;
			case 15:
				var keyMovil 	= "33";
				var keyPrepanico 	= "PREPANICO33";
				break;
			case 20:
				var keyMovil 	= "40";
				var keyPrepanico 	= "PREPANICO40";
				break;
			case 30:
				var keyMovil 	= "65";
				var keyPrepanico 	= "PREPANICO65";
				break;
			default:
				var keyMovil 	= "40";
				var keyPrepanico 	= "PREPANICO40";
				break;
		}
		var keySentido 	= obtenerLabelSentido(car.POSIMOVIL.sentido);
		keySentido 		= (eval(car.POSIMOVIL.velocidad) == 0) ? keySentido+"_Inactive" : keySentido+"_Active";
		keySentido 		+= "_simpleview"+ keyMovil.toString();
		var iconSentido = mapIcons.getSentidoIcon(keySentido);
		markerSentido 	= createMarkerSentido(pointLonLat, iconSentido);
		this.misVehiculosSentidoHash.put(carId, markerSentido);
		this.vehiculosSentidosSimpleLayer.addMarker(markerSentido);
		this.vehiculosSentidosSimpleLayer.div.style.zIndex=701;

		var iconMovil 	= mapIcons.getMovilIcon(keyMovil);
		marker			= this.createMarker(pointLonLat, iconMovil, carId);
		this.misVehiculosMarkersHash.put(carId, feature);
		this.misVehiculosMarkersHash.put(carId.toString()+"icon", marker);
		this.vehiculosSimpleLayer.addFeatures([feature]);
		this.vehiculosLayer.addMarker(marker);

		var markerPrepanico = this.misVehiculosMarkersHash.get(carId.toString()+"_PP");
		if(markerPrepanico!=null){
			this.misVehiculosMarkersHash.remove(carId.toString()+"_PP");
			this.vehiculosLayer.removeMarker(markerPrepanico);
			markerPrepanico.destroy();
		}

		if(car.controlaPrepanico!=-1){//controla prepanico
			var controlaPrepanico = car.POSIMOVIL.digitales.charAt(car.controlaPrepanico);
			if(car.SENSORES.prepanico.factor==0){
				controlaPrepanico = controlaPrepanico==1 ? 0:1;
			}
			if(controlaPrepanico == 1){
				var iconMovilPrepanico 	= mapIcons.getMovilIcon(keyPrepanico);
				markerPrepanico			= this.createMarker(pointLonLat, iconMovilPrepanico, carId);
				this.misVehiculosMarkersHash.put(carId.toString()+"_PP", markerPrepanico);
				this.vehiculosLayer.addMarker(markerPrepanico);
			}
		}
		//this.vehiculosSimpleLayer.setZIndex(900);
		//this.vehiculosLayer.setZIndex(720);
	},
	/**
	 * centra el mapa en un bounds y hace zoom para que se contenga
	 */
	centrarEnBounds: function(bounds){
		if(bounds != null) {
			this.oMap.zoomToExtent(bounds);
		}
	},
	/**
	 * centra el mapa en un bounds y hace zoom para que se contenga
	 */
	centrarEnPoly: function(poly){
		if(poly != null){
  			bounds = poly.getBounds(); //retorna los limites de la poly
  			this.oMap.setCenter(bounds.getCenter());
  			this.oMap.setZoom(this.oMap.getBoundsZoomLevel(bounds));
		}
	},
	/**
	 * remueve el ciculo que se dibuja al ver un movil
	 */
	removeHighlightCircle: function(){
		if (highlightCircleLayer){
			this.oMap.removeLayer(highlightCircleLayer);
			highlightCircleLayer=null;
		}
	},
	/**
	 * Dibuja el ciculo al ver un movil
	 */
	putHighlightCircle: function(LonLat, color){
		var bgColor = "#FFFFFF";
		if (color)
			bgColor = color;
		if (highlightCircleLayer) {
   		   this.oMap.removeLayer(highlightCircleLayer);
      	}
		//Openlayers.Geometry.Point
		var origin = new OpenLayers.Geometry.Point(LonLat.lon,LonLat.lat);
		//create Regular Polygon Geometry
		var radio = this.oMap.getExtent().getHeight()/20;
		var objF = OpenLayers.Geometry.Polygon.createRegularPolygon(origin, radio, 20, 90);
		//create vector layer
		highlightCircleLayer = new OpenLayers.Layer.Vector("highlightCircle");

		this.oMap.addLayer(highlightCircleLayer);
		//create feature
		var theFeature = new OpenLayers.Feature.Vector(objF,null,{
            strokeColor: "#202020",
			fillColor: bgColor,
            strokeOpacity: 0.6,
			fillOpacity: 0.6,
            strokeWidth: 1
        });
		//add feature
		highlightCircleLayer.addFeatures(theFeature);
		//set timeOut for the feature
		clearTimeout(highlightCircleTimeOut);
		highlightCircleTimeOut = setTimeout ( "removeHighlightCircle();", 5000);
	},

	localizarMovil: function(movilId){
		movilId = movilId.toString();
		this.mostrarMovil(movilId);
		var posimovil = misVehiculosHash.get(movilId).POSIMOVIL;

		if(posimovil!=null){
			this.centrar(posimovil.latitud, posimovil.longitud);
			this.putHighlightCircle(new OpenLayers.LonLat(parseFloat(posimovil.longitud), parseFloat(posimovil.latitud)).transform(this.displayProjection, this.projection));
			//marcar como seleccionado por default este movil en el historico
			if (movilHIS!=movilId){
				movilHIS = movilId;
				if (dinamicIncludes_Map.isHistoricoInclude())
					changeHistoricoSelectsValue();
			}
		}
		else{
			var callback =function(){
					posimovil = misVehiculosHash.get(movilId).POSIMOVIL;
					if (posimovil!=null){
						cMapController.getMapActive().centrar(posimovil.latitud, posimovil.longitud);
						cMapController.getMapActive().putHighlightCircle(new OpenLayers.LonLat(parseFloat(posimovil.longitud), parseFloat(posimovil.latitud)).transform(cMapController.getMapActive().getDisplayProjection(), cMapController.getMapActive().getProjection()));
						//marcar como seleccionado por default este movil en el historico
						if (movilHIS!=movilId){
							movilHIS = movilId;
							if (dinamicIncludes_Map.isHistoricoInclude())
								changeHistoricoSelectsValue();
						}
					}
					else{
						alert('Se desconocen reportes de posicionamiento del movil que desea localizar.');
					}
				};
			CargarPosiMovil(movilId, callback);
		}
	},
	refreshViewMisVehiculos: function(){
		var misVehiculosList = misVehiculosHash.values();
		for (var i=0; i<misVehiculosList.length; i++) {
			if (misVehiculosList[i]!='toJSONString'){
				var auxId = misVehiculosList[i].id;
				//VISIBLIDAD
				if (indexOfArray(this.vehiculosVisiblesId,auxId)!=-1){ // Tiene que estar VISIBLE
					if (VEH_SIMPLEVIEW==1)
						this.putSimpleIconCar(auxId);
					else
						this.putIconCar(auxId);
				}else { //tiene que estar OCULTO
					if (VEH_SIMPLEVIEW==1)
						this.clearSimpleIconCar(auxId);
					else
						this.clearIconCar(auxId);
					}
				}
			}
		if (misVehiculosList.length>0)
		 	printTableMisVehiculos();
		else
			document.getElementById('divListaVehiculos').innerHTML = '<span class="inputLBL">No se encontraron moviles registrados.</span>';
	},
	/**
	 * muestra un movil en el mapa
	 */
	mostrarMovil	: function(idMovil){
		idMovil = idMovil.toString();
		var pos=indexOfArray(this.vehiculosVisiblesId,idMovil);
		if (pos==-1){
			//comprobar que no se haya alcanzado el maximo de moviles visibles
			if (this.vehiculosVisiblesId.length>=misVehiculos_limitView){
				alert('Se ha alcanzado el limite de moviles que pueden visualizarse al mismo tiempo ('+misVehiculos_limitView+'). Para mostrar este movil sera necesario ocultar otro de la lista.')
				return false;
			}
			//marcar como seleccionado por default este movil en el historico
			if (movilHIS!=idMovil){
				movilHIS = idMovil;
				if (dinamicIncludes_Map.isHistoricoInclude())
					changeHistoricoSelectsValue();
			}
			//visualizar movil
			this.vehiculosVisiblesId.push(idMovil);
			cMapController.addMovilVisiblesGral(idMovil);
			this.refreshViewMisVehiculos();
		}
		return true;
	},

	ocultarMovil	: function(idMovil){
		var pos=indexOfArray(this.vehiculosVisiblesId,idMovil.toString());
		if (pos!=-1){
			this.vehiculosVisiblesId.splice(pos,1);
			//cMapController.removeMovilVisiblesGral(idMovil.toString());//elimino del general
			cMapController.updateMovilVisiblesGral();
			this.refreshViewMisVehiculos();
		}
		if (idMovil.toString()==this.cuentaSelectSegui)
			this.noSeguirMovil();
		if (idMovil.toString() == this.cuentaSelectSelection)
			this.noSeleccionarMovil();
	},

	verMovilesSeleccionados	: function(){
		if(this.vehiculosSeleccionadosId.length > 0){
			this.vehiculosVisiblesId	= new Array();
			for (var i=0; i<this.vehiculosSeleccionadosId.length;i++){
				this.vehiculosVisiblesId[i] = this.vehiculosSeleccionadosId[i];
				if (i==misVehiculos_limitView-1){
					alert('Se alcanzo el limite de moviles que pueden visualizarse al mismo tiempo, solo se mostraran los primeros '+misVehiculos_limitView+' seleccionados.')
					break;
				}
				//cMapController.addMovilVisiblesGral(this.vehiculosVisiblesId[i]);
			}
			if (this.cuentaSelectSegui!='-1'){
				var pos=indexOfArray(this.vehiculosVisiblesId,this.cuentaSelectSegui);
				if (pos==-1)
					this.vehiculosVisiblesId.push(this.cuentaSelectSegui);
			}
			if ( this.cuentaSelectSelection != '-1'){
				var pos=indexOfArray(this.vehiculosVisiblesId, this.cuentaSelectSelection);
				if (pos==-1)
					this.vehiculosVisiblesId.push( this.cuentaSelectSelection);
			}
			cMapController.updateMovilVisiblesGral();
			this.refreshViewMisVehiculos();
		}
	},

	ocultarMovilesSeleccionados: function(){
		var dejardeseguir=false;
		var dejardeseleccionar = false;
		for (var i=0;i<this.vehiculosSeleccionadosId.length;i++){
			var pos=indexOfArray(this.vehiculosVisiblesId,this.vehiculosSeleccionadosId[i].toString());
			if (pos!=-1){
				this.vehiculosVisiblesId.splice(pos,1);
				//cMapController.removeMovilVisiblesGral(this.vehiculosSeleccionadosId[i].toString());//elimino del general
			}
			if (this.vehiculosSeleccionadosId[i].toString() == this.cuentaSelectSegui)
				dejardeseguir=true;
			if (this.vehiculosSeleccionadosId[i].toString()==  this.cuentaSelectSelection)
				dejardeseleccionar = true;
		}
		cMapController.updateMovilVisiblesGral();
		this.refreshViewMisVehiculos();
		if (dejardeseguir)
			this.noSeguirMovil();
		if (dejardeseleccionar)
			this.noSeleccionarMovil();
	},

	seleccionarMovil: function(movilId) {
    	if (this.mostrarMovil(movilId.toString())){
    		if(this.menuOpcion	!= "seleccionActual"){
        		clickOpcionAcordeon("seleccionActual");
    		}
    		this.cuentaSelectSelection  = movilId.toString();
			this.refreshMovilSelection();
			this.refreshViewMisVehiculos();
			//ver tablero del movil seleccionado
			if ($j("#TableroContainerMonitorDiv").css("display") == "block") {
				viewMovilTablero(movilId.toString());
			}
			//marcar como seleccionado por default este movil en el historico
			if (movilHIS != this.cuentaSelectSelection){
				movilHIS =  this.cuentaSelectSelection;
				if (dinamicIncludes_Map.isHistoricoInclude())
					changeHistoricoSelectsValue();
			}
		}
    },

	noSeleccionarMovil: function() {
    	this.cuentaSelectSelection = '-1';
    	this.refreshMovilSelection();
		this.refreshViewMisVehiculos();
    },

	seguirMovil: function(movilId) {
		if(LOGIN.isBykom && this.estadoActivoMonitorearEventoCliente ){
			this.desactivarMonitorearEvento();	
		}
    	movilId = movilId.toString();
		if(this.mostrarMovil(movilId)){
			this.cuentaSelectSegui = movilId;
			this.refreshViewMisVehiculos();
    		this.changeSeguimiento();
			//marcar como seleccionado por default este movil en el historico
			if (movilHIS!=this.cuentaSelectSegui){
				movilHIS = this.cuentaSelectSegui;
				if (dinamicIncludes_Map.isHistoricoInclude())
					changeHistoricoSelectsValue();
			}
		}
		clickOpcionAcordeon("seguimiento");
    },

    noSeguirMovil: function() {
    	this.cuentaSelectSegui = '-1';
    	this.changeSeguimiento();
		this.refreshViewMisVehiculos();
    },

    changeSeguimiento: function() {
		this.resetEstelaSeguimiento();
		RefreshForm();
	},

	/**
	 * FUNCIONES DE CENTRADO EN EL MAPA
	 */
	centrar	: function(latitud, longitud){
		var lonlat = new OpenLayers.LonLat(parseFloat(longitud), parseFloat(latitud)).transform(this.displayProjection, this.projection);
		this.oMap.panTo(lonlat);

	},

	resetEstelaSeguimiento: function(){
		if(!this.estelaSeguimientoActive){
			return;
		}
		this.estelaSeguimientoPtoAnterior = null;
		this.estelaSeguimientoLATAnterior = null;
		this.estelaSeguimientoLONAnterior = null;
		this.estelaSeguimientoLayer.removeFeatures(this.estelaSeguimientoLayer.features);
		//BOTON EN ESTADO IN
		//this.BTNestelaSeguimiento.className = "BTNdejarEstelaOUT";
		this.BTNestelaSeguimiento.className = "icono eliminar_estela";
		this.estelaSeguimientoActive = false;
	},

	CargarSeguimiento: function(){
		this.oMap.addLayer(this.estelaSeguimientoLayer);
		this.BTNestelaSeguimiento = document.getElementById('activateEstelaSeguimientoBTN');
	},

	activateEstelaSeguimiento: function(){
		if (this.estelaSeguimientoActive)
			this.resetEstelaSeguimiento();
		else{
			//BOTON EN ESTADO OUT
			//this.BTNestelaSeguimiento.className = "BTNdejarEstelaIN";
			this.BTNestelaSeguimiento.className = "icono dejar_estela";
			this.estelaSeguimientoActive = true;
		}
		refreshButtonSeguimientoEstela(this.estelaSeguimientoActive,this.BTNestelaSeguimiento);
	},

	imprimirEstelaSeguimiento: function(){
		if (!this.estelaSeguimientoActive) return;
		var movil = misVehiculosHash.get(this.getCuentaSeguimiento());
		if ((movil==null)||(movil.POSIMOVIL==null)) return;
		if ((this.estelaSeguimientoLATAnterior==movil.POSIMOVIL.latitud)&&(this.estelaSeguimientoLONAnterior==movil.POSIMOVIL.longitud)){
			return;
		}
		var point = new OpenLayers.Geometry.Point(movil.POSIMOVIL.longitud, movil.POSIMOVIL.latitud).transform(this.displayProjection, this.projection);
		this.estelaSeguimientoLATAnterior = movil.POSIMOVIL.latitud;
		this.estelaSeguimientoLONAnterior = movil.POSIMOVIL.longitud;
		if (this.estelaSeguimientoPtoAnterior==null){
			this.estelaSeguimientoPtoAnterior=point;
		}else{ //grafico estela
			var lineString = new OpenLayers.Geometry.LineString([this.estelaSeguimientoPtoAnterior, point]);
			var theFeature = new OpenLayers.Feature.Vector(lineString,null,{
									strokeColor: "#0000FF",
	                    			strokeOpacity: 0.5,
	                    			strokeWidth: 4
	        					 });
			this.estelaSeguimientoLayer.addFeatures([theFeature]);
			this.estelaSeguimientoPtoAnterior=point;
		}
	},
	/************************************************
	 * 				SELECCIONAR						*
	 ***********************************************/
	centrarSeleccion: function() {
		if (this.cuentaSelectSelection == '-1'){
			return;
		}
		this.localizarMovil(this.cuentaSelectSelection);
	},

	seguirSeleccion: function() {
		this.seguirMovil(this.cuentaSelectSelection);
		cleanAllStates();
    	clickOpcionAcordeon("seguimiento");
    },

    /************************************************
	 * 				PUNTOS							*
	 ***********************************************/
    refreshViewPoints: function(){
    	if(LOGIN.PERMISOS[4]){
			var misPuntosList = misPuntosHash.values();
			for (var i=0; i<misPuntosList.length; i++) {
				if (misPuntosList[i]!='toJSONString'){
					var auxId 	= misPuntosList[i].id;
					var marker 	= this.misPuntosMarkersHash.get(auxId.toString());//Markers misPuntosMarkersHash.get(auxId.toString());
					if (indexOfArray( this.misPuntosVisiblesId,auxId)!=-1){ // Tiene que estar VISIBLE
						if ((marker == null)||(marker=='undefined')){//creo la marca del punto
				    		miPunto 	= misPuntosList[i];
							var icon 	= mapIcons.getMisPuntosIcon(miPunto.icono);
							var point 	= new OpenLayers.LonLat(parseFloat(miPunto.longitud),  parseFloat(miPunto.latitud)).transform(this.displayProjection, this.projection);
							var marker 	= this.crearMarcaDePunto(point,miPunto.nombre,miPunto.id,icon);
							this.misPuntosMarkersHash.put(auxId.toString(),marker);
							this.mispuntosLayer.addMarker(marker);
							}
						  marker.display(true);
						}
					else { //tiene que estar OCULTO
						if (marker != null){
						 	marker.display(false);
							}
						}
					}
				}
			if ((misPuntosList.length>0)||(misGruposHash.values().length>0))
			 	printTableMisPuntos();
			else
				document.getElementById('divListaPuntos').innerHTML = '<span class="inputLBL">No se encontraron puntos registrados.</span>';
    	}
	},

    crearMarcaDePunto: function(point,name,id,icon) {
		var marker = new OpenLayers.Marker(point,icon);
		if(id!=null){
			var mapaId = this.id;
			marker.events.register("click", marker, function() {
				cMapController.getMapById(mapaId).openInfoEvento(point, getInfoMisPuntosHTML(id));
        	});
		}
        return marker;
    },

    checkedPunto: function(check, miPunto){
		if (check.checked)
			this.puntosSeleccionadosId.push(check.value);
		else {
			pos=indexOfArray(this.puntosSeleccionadosId,check.value);
			if (pos!=-1)
				this.puntosSeleccionadosId.splice(pos,1);
			}
	},

	checkedPuntoHeredado: function(check, miPunto){
		if (check.checked)
			this.puntosSeleccionadosHeredadosId.push(check.value);
		else {
			pos=indexOfArray(this.puntosSeleccionadosHeredadosId,check.value);
			if (pos!=-1)
				this.puntosSeleccionadosHeredadosId.splice(pos,1);
			}
	},

    generateMovilesCercanosPunto: function(idPunto, isFromGestorDir){
    	if ((!isFromGestorDir)&&(indexOfArray(this.misPuntosVisiblesId,idPunto.toString())==-1))
    		this.mostrarPunto(idPunto.toString());
    	var idCercanos =  ((isFromGestorDir)?'GD_'+idPunto:idPunto);
    	var gD = ((isFromGestorDir) ? this.gestorDirHash.get(idPunto.toString()) : misPuntosHash.get(idPunto.toString()));
    	var gDC = this.movilesCercanosHash.get(idCercanos);
    	if (gDC==null){
    		gDC = new GestorDirCercanos({
    								   	id: idCercanos,
    									lat: ((isFromGestorDir)?gD.lat:gD.latitud),
    									lon: ((isFromGestorDir)?gD.lon:gD.longitud),
    									isFromGestorDir: isFromGestorDir
    								   });
    		this.movilesCercanosHash.put(gDC.id, gDC);
    	}
    	else {
    		if (gDC.POPUP!=null)
    			gDC.POPUP.close();
    	}
    	var distances = gDC.calculate(this.vehiculosVisiblesId);
    	printTableMovilesCercanosPunto(gDC);
    	var nombrePunto = ((isFromGestorDir) ? gD.name : gD.nombre)
    	var div = document.createElement('div');
    	div.appendChild(document.getElementById('containerMCP'+gDC.id));
    	dejarDeSeguir();
    	gDC.POPUP = dhtmlwindow.open('windowMCP_'+idCercanos, 'div', div, 'Cercanos a "'+nombrePunto+'"', 'width=360px,height=210px,left=200px,top=150px,resize=0,scrolling=1');
    	gDC.onclose = function(){gDC.POPUP = null;};
    	this.putHighlightCercanias(gDC);
    },

    generateMovilesCercanosPuntoDWB: function(idPunto,modoViaje, isFromGestorDir){
    	if ((!isFromGestorDir)&&(indexOfArray(this.misPuntosVisiblesId,idPunto.toString())==-1))
    		this.mostrarPunto(idPunto.toString());
    	var idCercanos =  ((isFromGestorDir)?'GD_'+idPunto:idPunto);

    	var gD = ((isFromGestorDir) ? this.gestorDirHash.get(idPunto.toString()) : misPuntosHash.get(idPunto.toString()));
    	var gDC = this.movilesCercanosHash.get(idCercanos);

    	if(gDC==null){
    		gDC = new GestorDirCercanos({
    								   	id: idCercanos,
    									lat: ((isFromGestorDir)?gD.lat:gD.latitud),
    									lon: ((isFromGestorDir)?gD.lon:gD.longitud),
    									isFromGestorDir: isFromGestorDir
    								   });
    		this.movilesCercanosHash.put(gDC.id, gDC);
    	}else{
    		if (gDC.POPUP!=null)
    			gDC.POPUP.close();
    	}
    	var idMap = this.id;
    	var distances = new Array();
    	var result = gDC.distanceDWBToMovil(gDC,gD,this.vehiculosVisiblesId,this.vehiculosVisiblesId.length,0,distances,idCercanos,modoViaje);
    },
	removeHighlightCercanias: function(){
		if (this.highlightCercaniasLayer){
			this.oMap.removeLayer(this.highlightCercaniasLayer);
			this.highlightCercaniasLayer.destroy();
			this.highlightCercaniasLayer=null;
		}
	},
	removeAllDistancasCercaniasLayer: function(){
//		if (this.layerRecorridos != null && this.layerRecorridos.length > 0){
//			for(var i=0; i<this.layerRecorridos.length; i++){
//				this.oMap.removeLayer(this.layerRecorridos[i]);
//				this.layerRecorridos[i].destroy();
//			}
//			this.layerRecorridos=null;
//		}
		if (this.highlightCercaniasLayer) {
			this.removeHighlightCercanias();
		}
    	var vKeys = this.distancesCercaniasLayer.keys();
    	for(var i=0; i< vKeys.length; i++){
    		this.removeDistancesCercaniasLayer(vKeys[i]);
    	}
    },
	removeDistancesCercaniasLayer: function(recorrido){
		layerRecorrido = this.distancesCercaniasLayer.get(recorrido.toString());
    	if (layerRecorrido == null) {
    		alert('recorrido no mapeado!');
    		return;
    	}
    	layerRecorrido.destroy();
		this.distancesCercaniasLayer.remove(layerRecorrido.toString());
	},
	putHighlightCercanias: function(gDC, typeZoom, toMovilId){
		//TYPE VALUE: 0 = hace zoom a todas las distancias en el mapa
		//TYPE VALUE: 1 = hace zoom a las distancias mas cercanas (diferencias no mayores a 5 km entre si)
		//TYPE VALUE: 2 = hace zoom entre el punto y un movil especificado en 'toMovilId'
		if(indexOfArray(this.misPuntosVisiblesId,gDC.toString())==-1){
			this.mostrarPunto(gDC.toString());
		}
		if (typeof gDC == 'string'){
			if(this.movilesCercanosHash.size() == 0){
				this.movilesCercanosHash.put(gDC.id, gDC);
			}
			gDC = this.movilesCercanosHash.get(gDC);
		}
		if (typeZoom==null)
			var typeZoom = 0;
		if (this.highlightCercaniasLayer) {
   		    this.removeHighlightCercanias();
      	}
		//create vector layer
		this.highlightCercaniasLayer = new OpenLayers.Layer.Vector("highlightCercanias");
		//function highlight in point
		createFeaturePoint = function(idMap,point, color){
			var colorFill = "#FFFFFF";
			if (color)
				colorFill = color;
			var radio = cMapController.getMapById(idMap).getMap().getExtent().getHeight()/25;
			var objF = OpenLayers.Geometry.Polygon.createRegularPolygon(point, radio, 20, 90);
			var theFeature = new OpenLayers.Feature.Vector(objF,null,{
            					strokeColor: "#202020",
								fillColor: colorFill,
            					strokeOpacity: 0.6,
								fillOpacity: 0.6,
            					strokeWidth: 1
        					 });
			return theFeature;
		}
		//function draw line
		createFeatureLine = function(from, to, color){
			var colorLine = "#414141";
			if (color)
				colorLine = color;
			var lineString = new OpenLayers.Geometry.LineString([from, to]);
			var theFeature = new OpenLayers.Feature.Vector(lineString,null,{
								strokeColor: colorLine,
                    			strokeOpacity: 0.6,
                    			strokeWidth: 1,
								strokeDashstyle: 'dash'

        					 });
			return theFeature;
		}

		var puntoMoviles = new Array();
		var featureBounds = new OpenLayers.Bounds();
		var origin = new OpenLayers.Geometry.Point(gDC.lon, gDC.lat).transform(this.displayProjection, this.projection);
		featureBounds.extend(origin);
		//create features
		puntoMoviles.push(origin);

		var minDistaceFlag = 0;
		if (gDC.movilesDistances.length > 0)
			minDistaceFlag = gDC.movilesDistances[0].distance;
		for (var i=0; (i < gDC.movilesDistances.length && i < MAXMOVILCERCA); i++){
			var movilId = gDC.movilesDistances[i].movilId.toString();
			//if ()
			var movil = misVehiculosHash.get(movilId);
			var point = new OpenLayers.Geometry.Point(movil.POSIMOVIL.longitud, movil.POSIMOVIL.latitud).transform(this.displayProjection, this.projection);
			switch(parseInt(typeZoom)){
				case 0: featureBounds.extend(point);
						break;
				case 1: var distCalcul = gDC.movilesDistances[i].distance - minDistaceFlag;
						if (distCalcul<=5)
							featureBounds.extend(point);
						break;
				case 2: if (movilId == toMovilId.toString())
							featureBounds.extend(point);
						break;
			}
			if ((parseInt(typeZoom)!=2)||((parseInt(typeZoom)==2)&&(movilId == toMovilId.toString()))){
				puntoMoviles.push(point);
				if (i==0)
					var line = createFeatureLine(origin, point, "#0000FF");
				else
					var line = createFeatureLine(origin, point);
				this.highlightCercaniasLayer.addFeatures(line);
			}
		}
		//centrar en bounds
		this.oMap.zoomToExtent(featureBounds);
		//highlight moviles
		for (var i=0; i<puntoMoviles.length; i++){
			var feat = null;
			switch (i){
				case 0: feat = createFeaturePoint(this.id,puntoMoviles[0], "#008000"); break;
				case 1: feat = createFeaturePoint(this.id,puntoMoviles[1], "#0000FF"); break;
				default: feat = createFeaturePoint(this.id,puntoMoviles[i]);
			}
			this.highlightCercaniasLayer.addFeatures(feat);
		}

		//add layer
		this.oMap.addLayer(this.highlightCercaniasLayer);
		//set timeOut for the layer
		clearTimeout(this.highlightCercaniasTimeOut);
		this.highlightCercaniasTimeOut = setTimeout ( "cMapController.getMapById("+this.id+").removeHighlightCercanias();", 10000);
	},

	showDistanceLine: function (gDC,typeZoom,movilId){
		//typeZoom: 0 = hace zoom a todas las distancias en el mapa
		//typeZoom: 1 = hace zoom a las distancias mas cercanas (diferencias no mayores a 5 km entre si)
		//typeZoom: 2 = hace zoom entre el punto y un movil especificado en 'movilId'
		if(indexOfArray(this.misPuntosVisiblesId,gDC.toString())==-1){
			this.mostrarPunto(gDC.toString());
		}
		if (typeof gDC == 'string'){
			if(this.movilesCercanosHash.size() == 0){
				this.movilesCercanosHash.put(gDC.id, gDC);
			}
			gDC = this.movilesCercanosHash.get(gDC);
		}
		if (this.distancesCercaniasLayer.size() > 0) {
   		    this.removeAllDistancasCercaniasLayer();
      	}

		if (this.highlightCercaniasLayer) {
   		    this.removeHighlightCercanias();
      	}

		if (typeZoom==null){
			var typeZoom = 0;
		}

		var idMap = this.id;
		//function highlight in point
		createFeaturePoint = function(idMap,point, color){
			var colorFill = "#FFFFFF";
			if (color)
				colorFill = color;
			var radio = cMapController.getMapById(idMap).getMap().getExtent().getHeight()/25;
			var objF = OpenLayers.Geometry.Polygon.createRegularPolygon(point, radio, 20, 90);
			var theFeature = new OpenLayers.Feature.Vector(objF,null,{
            					strokeColor: "#202020",
								fillColor: colorFill,
            					strokeOpacity: 0.6,
								fillOpacity: 0.6,
            					strokeWidth: 1
        					 });
			return theFeature;
		}

		var origen 			= new OpenLayers.Geometry.Point(gDC.lon, gDC.lat).transform(this.displayProjection, this.projection);
		var origenLonLat	= new OpenLayers.LonLat(gDC.lon, gDC.lat).transform(this.displayProjection, this.projection);

		var featureBounds 	= new OpenLayers.Bounds();
		featureBounds.extend(origen);

		this.layerRecorridos = new Array();

		var minDistaceFlag = 0;
		if (gDC.movilesDistances.length > 0){
			minDistaceFlag = gDC.movilesDistances[0].distance;
		}
		var puntoMoviles = new Array();
		puntoMoviles.push(origen);

		if(typeZoom == 2 ){
			var lotePoints 	= new Array();
			this.layerRecorridos[0] =  new OpenLayers.Layer.Vector("highlightCercanias");
//			var feat = createFeaturePoint(this.id,origen, "#0000FF");
//			this.layerRecorridos[0].addFeatures(feat);

			var i=0;
			var movil = null;
			while(i < gDC.movilesDistances.length){
				if(gDC.movilesDistances[i].movilId.toString() == movilId.toString()){
					var movil = gDC.movilesDistances[i];
					break;
				}
				i++;
			}
			var stepsPuntos 	= movil.steps;
			var destino			= new OpenLayers.Geometry.Point(movil.legs.start_location.lng(), movil.legs.start_location.lat()).transform(this.displayProjection, this.projection);
			var destinoLonLat	= new OpenLayers.LonLat(movil.legs.start_location.lng(), movil.legs.start_location.lat()).transform(this.displayProjection, this.projection);
			puntoMoviles.push(destino);
			for (var i=0; i < stepsPuntos.length; i++){
				if(stepsPuntos[i].path != null && stepsPuntos[i].path != ""){
					var path = stepsPuntos[i].path;
					for(var j = 0; j < path.length; j++){
						var oPoint = new OpenLayers.Geometry.Point(path[j].lng(), path[j].lat()).transform(this.displayProjection, this.projection);
						lotePoints.push(oPoint);
						featureBounds.extend(oPoint);
					}
				}
			}
			featureBounds.extend(destino);

			var feature = this.drawPolyLine(lotePoints, '#330099');
			this.layerRecorridos[0].addFeatures(feature);

//			var feat = createFeaturePoint(this.id,destino, "#008000");
//			this.layerRecorridos[0].addFeatures(feat);

			this.distancesCercaniasLayer.put(movil.movilId.toString(), this.layerRecorridos[0]);
			//this.oMap.addLayer(this.layerRecorridos[0]);

		}else if(typeZoom == 0 || typeZoom == 1){
				for (var m=0; m < gDC.movilesDistances.length; m++){
					var lotePoints 	= new Array();
					this.layerRecorridos[m] =  new OpenLayers.Layer.Vector("highlightCercanias"+m);
					//var feat = createFeaturePoint(this.id,origen, "#0000FF");
					//this.layerRecorridos[m].addFeatures(feat);

					var movil		 	= gDC.movilesDistances[m];
					var stepsPuntos 	= movil.steps;
					var destino			= new OpenLayers.Geometry.Point(movil.legs.start_location.lng(), movil.legs.start_location.lat()).transform(this.displayProjection, this.projection);
					var destinoLonLat	= new OpenLayers.LonLat(movil.legs.start_location.lng(), movil.legs.start_location.lat()).transform(this.displayProjection, this.projection);
					puntoMoviles.push(destino);


					var distCalcul = movil.distance - minDistaceFlag;
					for (var i=0; i < stepsPuntos.length; i++){
						if(stepsPuntos[i].path != null && stepsPuntos[i].path != ""){
							var path = stepsPuntos[i].path;
							for(var j = 0; j < path.length; j++){
								var oPoint = new OpenLayers.Geometry.Point(path[j].lng(), path[j].lat()).transform(this.displayProjection, this.projection);
								lotePoints.push(oPoint);
								if (typeZoom == 1){
									if(distCalcul<=5){
										featureBounds.extend(oPoint);
									}
								}else{
									featureBounds.extend(oPoint);
								}
							}
						}
					}
					//add layer
					if (typeZoom == 1){
						if(distCalcul<=5){
							featureBounds.extend(destino);
						}
					}else{
						featureBounds.extend(destino);
					}

					var feature = this.drawPolyLine(lotePoints, '#330099');
					this.layerRecorridos[m].addFeatures(feature);

					//var feat = createFeaturePoint(this.id,destino, "#008000");
					//this.layerRecorridos[m].addFeatures(feat);

					this.distancesCercaniasLayer.put(movil.movilId.toString(), this.layerRecorridos[m]);

				}
		}else{

		}
		//centrar en bounds
		this.oMap.zoomToExtent(featureBounds);

		this.highlightCercaniasLayer = new OpenLayers.Layer.Vector("highlightDist");
		var featOrig = createFeaturePoint(this.id,puntoMoviles[0], "#008000");
		this.highlightCercaniasLayer.addFeatures(featOrig);
		for (var i=1; i<puntoMoviles.length; i++){
			var feat = null;
			switch (i){
				case 1: feat = createFeaturePoint(this.id,puntoMoviles[1], "#0000FF"); break;
				default: feat = createFeaturePoint(this.id,puntoMoviles[i]);
			}
			this.highlightCercaniasLayer.addFeatures(feat);
			this.oMap.addLayer(this.layerRecorridos[i-1]);

		}
		this.oMap.addLayer(this.highlightCercaniasLayer);

		//set timeOut for the layer
		clearTimeout(this.highlightCercaniasTimeOut);
		this.highlightCercaniasTimeOut = setTimeout ( "cMapController.getMapById("+this.id+").removeHighlightCercanias();", 10000);
	},


	drawPolyLine: function(arrayPoints, color){ //recibe un Array de OpenLayer.Geometry.Points
		var lineString = new OpenLayers.Geometry.LineString(arrayPoints);
		var feature = new OpenLayers.Feature.Vector(lineString, null,{
	            strokeColor: color,
	            strokeWidth: 6,
				strokeOpacity: 0.5
		        });
		return feature;
	},
	/************************************************
	 * 				ZONAS							*
	 ***********************************************/
	createZonaMarker: function(idZona){ //crea y retorna un Poligon dado un ID de una zona
		var miZona = misZonasHash.get(idZona.toString());
		var limites = new Array();
		for (var i=0; i<miZona.PUNTOSLAT.length; i++){
			var geoPoint = new OpenLayers.Geometry.Point(miZona.PUNTOSLNG[i],miZona.PUNTOSLAT[i]).transform(this.displayProjection, this.projection);
			limites[i]=geoPoint;
			}
		var linearRing = new OpenLayers.Geometry.LinearRing(limites);
		var polygon = new OpenLayers.Geometry.Polygon(linearRing);
		var feature = new OpenLayers.Feature.Vector(polygon,null,{
            strokeColor: "#"+miZona.color,
			fillColor: "#"+miZona.color,
            strokeOpacity: 0.5,
			fillOpacity: 0.2,
            strokeWidth: 1
        });
		var layerZona = new OpenLayers.Layer.Vector("ZONA_"+idZona);
		layerZona.addFeatures(feature);
		layerZona.div.style.zIndex=800;
		return layerZona;
	},
	removeHighlightZonaMarker: function(){
		if (this.highlightZona){
			this.oMap.removeLayer(this.highlightZona);
			this.highlightZona.destroy();
			this.highlightZona=null;
		}
	},

	highlightZonaMarker: function(idZona){
	  var miZona = misZonasHash.get(idZona.toString());
	  var polyPoints = new Array();
	  for (var i=0; i<miZona.PUNTOSLAT.length; i++){
			var geoPoint = new OpenLayers.Geometry.Point(miZona.PUNTOSLNG[i],miZona.PUNTOSLAT[i]).transform(this.displayProjection, this.projection);
			polyPoints[i]=geoPoint;
			}
      if(this.highlightZona) {
        this.oMap.removeLayer(this.highlightZona);
        this.highlightZona.destroy();
      }
      this.highlightZona = new OpenLayers.Layer.Vector("highlightZona");
	  this.oMap.addLayer(this.highlightZona);
	  var lineString 	= new OpenLayers.Geometry.LineString(polyPoints);
	  var feature 		= new OpenLayers.Feature.Vector(lineString,null,{
            strokeColor: "#"+miZona.color.toUpperCase(),
            strokeWidth: 4
        });

	  this.highlightZona.addFeatures(feature);
	  this.centrarEnBounds(lineString.getBounds());
	  clearTimeout(this.highlightZonaTimeOut);
	  this.highlightZonaTimeOut = setTimeout ( "cMapController.getMapById("+this.id+").removeHighlightZonaMarker();", 5000 );
    },

	centrarNewZona: function(){
		if (this.newZonaPolygonLayer.features.length>0){
			this.centrarEnBounds(this.newZonaPolygonLayer.features[0].geometry.getBounds());
		}
	},

	ocultarZonasVisibles: function(){
		for (i=0; i < this.misZonasVisiblesId.length; i++){
			var marker = this.misZonasMarkersHash.get(this.misZonasVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.hide();
			}
		}
	},

	mostrarZonasVisibles: function(){
		for (i=0; i<this.misZonasVisiblesId.length; i++){
			var marker = this.misZonasMarkersHash.get(this.misZonasVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.show();
			}
		}
	},

	ocultarZona: function(idZona){
		pos=indexOfArray(this.misZonasVisiblesId,idZona.toString());
		if (pos!=-1)
			this.misZonasVisiblesId.splice(pos,1);
		this.refreshViewZonas();
	},

	mostrarZona: function(idZona){
		this.misZonasVisiblesId.push(idZona.toString());
		this.refreshViewZonas();
	},

	verZonasSeleccionadas: function(){
		this.misZonasVisiblesId = new Array();
		for (var i=0; i < this.zonasSeleccionadasId.length;i++)
			this.misZonasVisiblesId[i] = this.zonasSeleccionadasId[i];
		for (var i=0; i<this.zonasSeleccionadasHeredadasId.length;i++)
			this.misZonasVisiblesId.push(this.zonasSeleccionadasHeredadasId[i]);
		this.refreshViewZonas();
	},

	ocultarZonasSeleccionadas: function(){
		for (var i=0;i < this.zonasSeleccionadasId.length;i++){
			pos=indexOfArray( this.misZonasVisiblesId, this.zonasSeleccionadasId[i].toString());
			if (pos!=-1)
				 this.misZonasVisiblesId.splice(pos,1);
		}
		for (var i=0;i <  this.zonasSeleccionadasHeredadasId.length;i++){
			pos=indexOfArray( this.misZonasVisiblesId, this.zonasSeleccionadasHeredadasId[i].toString());
			if (pos!=-1)
				 this.misZonasVisiblesId.splice(pos,1);
		}
		this.refreshViewZonas();
	},

	refreshViewZonas: function(){
		if(LOGIN.PERMISOS[5]){
			var misZonasList = misZonasHash.values();
			for (var i=0; i < misZonasList.length; i++) {
				if (misZonasList[i]!='toJSONString'){
					var auxId = misZonasList[i].id.toString();
					var layerZona = this.misZonasMarkersHash.get(auxId);
					if (indexOfArray(this.misZonasVisiblesId,auxId.toString())!=-1){ // Tiene que estar VISIBLE
						if ((layerZona == null)||(layerZona=='undefined')){//creo la marca de la zona
							layerZona = this.createZonaMarker(auxId.toString());
							this.misZonasMarkersHash.put(auxId.toString(),layerZona);
							}
						  this.oMap.addLayer(layerZona);
					}else { //tiene que estar OCULTO
						if ((layerZona != null)&&(this.oMap.getLayer(layerZona.id)!=null)){
							this.oMap.removeLayer(layerZona);
						}
					}
				}
			}
			if (misZonasList.length>0){
				this.printTableMisZonas();
			}else{
				document.getElementById('divListaZonas').innerHTML = '<span class="inputLBL">No se encontraron zonas registradas.</span>';
			}
		}
	},

	checkedZona: function(check, miZona){
		if (check.checked)
			this.zonasSeleccionadasId.push(check.value);
		else {
			pos=indexOfArray(this.zonasSeleccionadasId,check.value.toString());
			if (pos!=-1)
				this.zonasSeleccionadasId.splice(pos,1);
			}
	},

	checkedZonaHeredada: function(check, miZona){
		if (check.checked)
			this.zonasSeleccionadasHeredadasId.push(check.value);
		else {
			pos=indexOfArray(this.zonasSeleccionadasHeredadasId,check.value.toString());
			if (pos!=-1)
				this.zonasSeleccionadasHeredadasId.splice(pos,1);
			}
	},

	printTableMisZonas: function(){
		tabla = '<table width="100%" border="0" cellpadding="5" cellspacing="0" >';
		var misZonasList = misZonasHash.values();
		var sortArray = new SortArray(misZonasList,"QUICKSORT");
		sortArray.ordenar(orderTypeMisZonas,'nombre');
		for (var i=0; i<misZonasList.length; i++) {
			if (misZonasList[i]!='toJSONString'){
			var checked = '';
			var heredado = false; //es una zona de flota y soy un movil
			if (indexOfArray(this.zonasSeleccionadasId,misZonasList[i].id.toString())!=-1)
				checked='checked';
			if (indexOfArray(this.zonasSeleccionadasHeredadasId,misZonasList[i].id.toString())!=-1)
				checked='checked';
			if (( parseInt(LOGIN.objetivo)==4 || parseInt(LOGIN.objetivoDB)==2)&&(misZonasList[i].esflota==3))
				heredado=true;
			var functionCheck = "cMapController.getMapActive().checkedZona";
			var bgColor = "transparent";
			if (heredado){
				functionCheck = "cMapController.getMapActive().checkedZonaHeredada";
				bgColor = "#F1F1F1";
			}
			tabla += '<tr oncontextmenu="return createPopUpZona(event,'+misZonasList[i].id+',this,true);">';
			tabla += '<td valign="middle" width="16">';
   			tabla += " <input type='checkbox' name='boxZones[]' value='"+misZonasList[i].id+"' "+checked+" onClick='"+functionCheck+"(this);'>";
        	tabla += '</td>';
        	tabla += '<td valign="middle" width="16">';
			tabla += '  <div style="border:1px solid #8E8F8F; width:11px; height:11px; margin-top:-3px; background:#'+misZonasList[i].color+'"> </div>';
        	tabla += '</td>';
        	tabla += '<td>';
        	tabla += ' <span class="inputLBL" style="background:'+bgColor+';">'+misZonasList[i].nombre+'</span>';
        	tabla += '</td>';

			tabla += '<td align="right">';

			//seccion de iconos de estado...
			tabla += '<table border="0" cellpadding="0" cellspacing="1" ><tr>';

			//PUBLICADO:
			tabla += '<td width="20" height="20" align="center" valign="middle" style="background-color:#F0F0F0;" >';
			if ((parseInt(LOGIN.objetivo)==3)&&(misZonasList[i].publico==1)){
				tabla += '<img src="images/zonaPublica.gif" border="0" title="Zona publicada"/>';
				}
			tabla += '</td>';

			//VISIBILIDAD:
			tabla += '<td width="20" height="20" align="center" valign="middle" style="background-color:#F0F0F0;">';

			if (indexOfArray(this.misZonasVisiblesId,misZonasList[i].id.toString())!=-1){
				tabla += '<img src="images/zonaVisible.gif" border="0" onclick="cMapController.getMapActive().highlightZonaMarker('+misZonasList[i].id.toString()+');" style="cursor:pointer;" title="Zona visible (Click para localizar y centrar)"/>';
			}
			tabla += '</td>';
			tabla += '</tr></table>';
        	tabla += '</td>';
			tabla += '</tr>';
			}
		}
		tabla += '</table>';
		document.getElementById('divListaZonas').innerHTML = tabla;
	},

	zonaChangeColor: function(newColor){
		document.getElementById('colorZonaText').color.hidePicker();
		if (this.newZonaPolygonLayer.features.length>0){
			this.drawNewZona();
		}
	},

	clearNewZona: function() {
		// Remueve el poligono (zona) del mapa y resetea los arrays
		if (this.newZonaMarkersLayer!=null){
			this.newZonaPolygonLayer.destroyFeatures();
			this.newZonaMarkersLayer.clearMarkers();
			this.newZonaMarkers.length = 0;
			this.newZonaPoints.length = 0;
		}
	},

	nuevaZona: function() {
		this.bModoABMZonas = true;
		dejarDeSeguir();
		//mostrar panel de nueva zona
		document.getElementById('newZonaTitle').innerHTML = "Nueva Zona";
		document.getElementById('newZonaDesc').innerHTML = "Haga clic en al menos en tres lugares diferentes del mapa para dibujar una zona. Los ángulos de la zona son arrastrables y extraíbles. Puede añadir más vértices simplemente haciendo 'click' o eliminarlos con 'doble click' sobre el vertice que desee."
		hideDiv('div_miszonasPpal');
		showDiv('div_nuevaZona');
		this.setEstadoNuevaZona();
		this.cleanFormNuevaZona();
		this.newZonaPoints = new Array();
		this.newZonaMarkers = new Array();
		this.isNewZona = true;
		//newZonaShape = null;
	},

	cleanEstadoNuevaZona: function(){ //limpia el mapa del estado "MARCAR NUEVA ZONA"
		this.bModoABMZonas = false;
		if (this.dragUpdateZonaMarkersEvents!=null){
			this.dragUpdateZonaMarkersEvents.deactivate();
			this.oMap.removeControl(this.dragUpdateZonaMarkersEvents);
			this.dragUpdateZonaMarkersEvents.destroy();
			this.dragUpdateZonaMarkersEvents=null;
		}
	    if (this.newZonaPolygonLayer!=null){
	    	this.oMap.removeLayer(this.newZonaPolygonLayer);
	    	this.newZonaPolygonLayer.destroy();
	    	this.newZonaPolygonLayer = null;
	    	this.oMap.removeLayer(this.newZonaMarkersLayer);
			this.newZonaMarkersLayer.destroy();
			this.newZonaMarkersLayer = null;
		}
		if(this.newZonaEvents!=null)
			this.newZonaEvents.deactivate();
		this.defaultEvents.activate();
		hideDiv('div_nuevaZona');
		showDiv('div_miszonasPpal');
		this.clearNewZona();
		this.oMap.div.style.cursor = "default";
		this.refreshViewZonas();
	},

	setEstadoNuevaZona: function(){ //prepara el mapa para el estado "MARCAR NUEVA ZONA"
		this.newZonaPolygonLayer = new OpenLayers.Layer.Vector("Nueva Zona Polygon");
		this.oMap.addLayer(this.newZonaPolygonLayer);
		this.newZonaMarkersLayer = new OpenLayers.Layer.Markers("Nueva Zona Markers");
		this.oMap.addLayer(this.newZonaMarkersLayer);
		if (this.newZonaEvents==null){
			this.newZonaEvents = new OpenLayers.Control.NewZona();
			this.oMap.addControl(this.newZonaEvents);
		}
		this.defaultEvents.deactivate();
		this.newZonaEvents.activate();
		this.dragUpdateZonaMarkersEvents = new OpenLayers.Control.DragMarker(cMapController.getMapActive().getNewZonaMarkersLayer(), {
											'onStart': function() {
																	cMapController.getMapActive().addChangeNuevaZona();
																},
											'onComplete': function() {
																cMapController.getMapActive().addChangeNuevaZona();
																cMapController.getMapActive().drawNewZona();
															}
											});
		this.oMap.addControl(this.dragUpdateZonaMarkersEvents);
		this.dragUpdateZonaMarkersEvents.activate();
		this.oMap.div.style.cursor = "crosshair";
	},

	cleanFormNuevaZona: function(){
		hideDiv('newZonaErrorDisplay');
		document.getElementById("newZonaErrorDisplay").innerHTML = "";
		document.getElementById('zonaIdHID').value="";
		document.getElementById('zonaArea').innerHTML="0 km&sup2;";
		document.getElementById('descZona').value="";
		document.getElementById('nombreZona').value="";
		document.getElementById('colorZonaId').value=COLOR_DEFAULT_ZONA_GMAP;
		document.getElementById('colorZonaText').style.background='#'+COLOR_DEFAULT_ZONA_GMAP;
		if (parseInt(LOGIN.objetivo) == 3 && !LOGIN.isBykom)
			document.getElementById('zonaPublicaCHK').checked=false;
		this.clearNewZona();
		this.newZonasHistorial = new Array();
	},

	zonaAddVertice: function(point) {
	   if(point) {
	    // vertice marker icons
		var size 		= new OpenLayers.Size(11,11);
		var offset 		= new OpenLayers.Pixel(-(size.w/2), -(size.h));
		var icon 		= new OpenLayers.Icon('images/vertice.png', size, offset);
		var markerVertice = new OpenLayers.Marker(point,icon);
		markerVertice.events.register('mouseover', markerVertice, function(evt) {
										markerVertice.setUrl('images/verticeHover.png');
										}
									);
		markerVertice.events.register('mouseout', markerVertice, function(evt) {
									markerVertice.setUrl('images/vertice.png');});
		markerVertice.events.register('dblclick', markerVertice, function(evt) { // Encontrar el vertice y removerlo
	   																	  for(var n = 0; n < cMapController.getMapActive().getNewZonaMarkers().length; n++) {
		   																	 if(cMapController.getMapActive().getNewZonaMarkers()[n] == markerVertice) {
		   																		 cMapController.getMapActive().addChangeNuevaZona();
		   																		cMapController.getMapActive().getNewZonaMarkersLayer().removeMarker(cMapController.getMapActive().getNewZonaMarkers()[n]);
		   																		 break;
   		  																	 }
  	   																	   }
	   																	cMapController.getMapActive().getNewZonaMarkers().splice(n, 1);
	   																	cMapController.getMapActive().drawNewZona();
																		 });
		this.newZonaMarkers.push(markerVertice);
		this.addChangeNuevaZona();
		this.newZonaMarkersLayer.addMarker(markerVertice);
	    if (this.isNewZona)
	    	this.drawNewZona();
	    }
	},

	drawNewZona: function() {
		this.newZonaPolygonLayer.destroyFeatures();
		this.newZonaPoints.length = 0;
		var limites 		= new Array();
	    for(var i = 0; i < this.newZonaMarkers.length; i++) {
	    	this.newZonaPoints.push(this.newZonaMarkers[i].lonlat.clone().transform(this.projection, this.displayProjection));
	    	var geoPoint 	= new OpenLayers.Geometry.Point(this.newZonaMarkers[i].lonlat.lon,this.newZonaMarkers[i].lonlat.lat);
	    	limites[i]		= geoPoint;
		}
		if (this.newZonaMarkers.length>0)
			this.newZonaPoints.push(this.newZonaMarkers[0].lonlat.clone().transform(this.projection, this.displayProjection)); // Cerrar la figura con la ultima linea o no...
		var linearRing 	= new OpenLayers.Geometry.LinearRing(limites);
		var polygon	 	= new OpenLayers.Geometry.Polygon(linearRing);
		var feature 	= new OpenLayers.Feature.Vector(polygon,null,{
            strokeColor: this.newZonaLineColor,
			fillColor: "#"+document.getElementById('colorZonaId').value,
            strokeOpacity: 1,
			fillOpacity: 0.2,
            strokeWidth: 3
        });
		distancia = polygon.getArea();
		var inPerDisplayUnit = OpenLayers.INCHES_PER_UNIT['km'];
        if(inPerDisplayUnit) {
            var inPerMapUnit = OpenLayers.INCHES_PER_UNIT[this.oMap.units];
            distancia *= Math.pow((inPerMapUnit / inPerDisplayUnit), 2);
        }

		if(this.newZonaMarkers.length <= 2 ) {
		  document.getElementById('zonaArea').innerHTML="0 km&sup2;";
		}else if(this.newZonaMarkers.length > 2 ) {
		  document.getElementById('zonaArea').innerHTML=distancia.toFixed(3)+" km&sup2;";
		}
		this.newZonaPolygonLayer.addFeatures(feature);
	},

	addChangeNuevaZona: function(){
		var cloneArray = new Array();
		for (var i=0; i<this.newZonaMarkers.length; i++){
			var cloneMarker = new OpenLayers.Marker(this.newZonaMarkers[i].lonlat.clone(),this.newZonaMarkers[i].icon.clone());
			cloneArray[i] = cloneMarker;
			}
		this.newZonasHistorial.push(cloneArray);
	},

	removeChangeNuevaZona:function(){
		if (this.newZonasHistorial.length>1){
			this.newZonaMarkersLayer.clearMarkers();
			this.newZonaMarkers = this.newZonasHistorial[this.newZonasHistorial.length-2];
			for (var i=0; i<this.newZonaMarkers.length; i++)
				this.newZonaMarkersLayer.addMarker(this.newZonaMarkers[i]);
			this.newZonasHistorial.length = this.newZonasHistorial.length-1;
			this.drawNewZona();
		}
		else {
			if (document.getElementById('zonaIdHID').value=='')
				this.cleanFormNuevaZona();
			else
				this.cleanFormModificarZona();
		}

	},

	cleanFormModificarZona: function(){
		this.clearNewZona();
		hideDiv('newZonaErrorDisplay');
		document.getElementById("newZonaErrorDisplay").innerHTML = "";
		var zonaId = document.getElementById('zonaIdHID').value;
		zonaModificar = misZonasHash.get(zonaId.toString());
		document.getElementById('zonaArea').innerHTML	= "0 km&sup2;";
		document.getElementById('descZona').value		= zonaModificar.datos;
		document.getElementById('nombreZona').value		= zonaModificar.nombre;
		document.getElementById('colorZonaId').value	= zonaModificar.color;
		document.getElementById('colorZonaText').style.background='#'+zonaModificar.color;
		if (parseInt(LOGIN.objetivo) == 3 && !LOGIN.isBykom){
			document.getElementById('zonaPublicaCHK').checked=false;
			if (zonaModificar.publico==1)
				document.getElementById('zonaPublicaCHK').checked=true;
		}
		if(LOGIN.isBykom){
			$j("#toleranciaMisZonas").val(zonaModificar.tolerancia);
		}
		//creo los vertices a partir de los puntos que tenemos guardados.
		this.isNewZona = false;
        for (i=0; i<zonaModificar.PUNTOSLAT.length-1; i++){ //hago lenght-1 porque el ultimo punto es el repetido que cierra el poligono
		    var lonlat = new OpenLayers.LonLat(parseFloat(zonaModificar.PUNTOSLNG[i]),parseFloat(zonaModificar.PUNTOSLAT[i])).transform(this.displayProjection, this.projection);
			this.zonaAddVertice(lonlat);
		}
        this.drawNewZona();
        this.centrarNewZona();
        this.isNewZona = true;
        this.newZonasHistorial = new Array();
	},

	modificarZona: function(idZona) {
		if (idZona!=null){
			this.bModoABMZonas = true;
			dejarDeSeguir();
			//mostrar panel de nueva zona
			document.getElementById('newZonaTitle').innerHTML = "Modificar Zona";
			document.getElementById('newZonaDesc').innerHTML = "Para modificar la zona tenga en cuenta que los ángulos son arrastrables y extraíbles. Puede añadir más vértices haciendo 'click'. Tenga en cuenta que los nuevos vertices se uniran a partir del ultimo que ha sido creado."
			hideDiv('div_miszonasPpal');
			showDiv('div_nuevaZona');
			this.setEstadoNuevaZona();
			zonaModificar = misZonasHash.get(idZona.toString());
			this.clearNewZona();
			pos = indexOfArray(this.misZonasVisiblesId, zonaModificar.id.toString());
			if (pos!=-1) //La marca de zona estaba visible
				this.oMap.removeLayer(this.misZonasMarkersHash.get(zonaModificar.id.toString())); //remuevo la layer a modificar del mapa
			//inicializo el form
			hideDiv('newZonaErrorDisplay');
			document.getElementById("newZonaErrorDisplay").innerHTML = "";
			document.getElementById('zonaIdHID').value	= zonaModificar.id;
			this.cleanFormModificarZona();
		}
	},

	validarNuevaZona: function(){
		errorMsg = '';
		countPuntos = this.newZonaPoints.length;
		desc = document.getElementById("descZona").value;
		nombre = document.getElementById("nombreZona").value;

		if (countPuntos<=3)
			errorMsg += "Debe marcar al menos tres puntos para grabar una zona.<br>";

		if (trim(nombre)!=''){
			if (!_validString(nombre))
				errorMsg += "El campo 'nombre' no acepta caracteres especiales.<br>";
			}
		else
			errorMsg += "El campo 'nombre' es obligatorio.<br>";

		if (trim(desc)!=''){
			if (!_validString(desc))
				errorMsg += "El campo 'descripcion' no acepta caracteres especiales.<br>";
			}
		if(LOGIN.isBykom){
			var tolerancia = $j("#toleranciaMisZonas").val();
			if(tolerancia == ""){
				errorMsg += "El campo 'tolerancia' es obligatorio.<br>";
			}
		}
		
		if (errorMsg == '')
			return true;
		document.getElementById("newZonaErrorDisplay").innerHTML = errorMsg;
		showDiv("newZonaErrorDisplay");
		return false;
	},
	/************************************************
	 * 				MISCELANEAS						*
	 ***********************************************/
	eliminarGestorDir: function(idGestorDir){
		var gestorDir = this.gestorDirHash.get(idGestorDir.toString());
		var conf = confirm('Se eliminara la marca de direccion "'+gestorDir.name+'". Desea continuar de todas formas?');
		if (conf){
			this.gestorDirMarkersLayer.removeMarker(gestorDir.marker);
			gestorDir.marker.destroy();
			this.gestorDirHash.remove(idGestorDir.toString());
			this.printTableGestorDir();
		}
	},

	ubicarGestorDir: function(idGestorDir){
		var gestorDir 	= this.gestorDirHash.get(idGestorDir.toString());
		dejarDeSeguir();
		var lonlat 		= new OpenLayers.LonLat(gestorDir.lon,gestorDir.lat).transform(this.displayProjection, this.projection);
		this.centrar(gestorDir.lat, gestorDir.lon);
		this.putHighlightCircle(lonlat);
		this.bTienePuntosTemp = true;
	},

	printTableGestorDir: function(){
		var tabla = '<table width="220">';
		var gestorDirList = this.gestorDirHash.values();
		if (gestorDirList.length==0){
			this.bTienePuntosTemp = false;
			tabla += '<tr><td><span class="sectionDESC">';
			tabla += 'Para marcar una direccion en el mapa utilice el buscador provisto en el menu de esta seccion.<br>Podra realizar busquedas tanto por calle y altura como por coordenadas geograficas.<br>Las direcciones encontradas seran listadas en esta seccion para que pueda realizar las operaciones provistas para ellas. ';
			tabla += '</span></td></tr>';
		}
		else{
			for (var i=0; i<gestorDirList.length; i++) {
				tabla += '<tr oncontextmenu="return createPopUpGestorDir(event,'+gestorDirList[i].id+',this);">';
	        	tabla += '<td width="20">';
				tabla += '  <img src="'+mapIcons.getMisPuntosIcon(gestorDirList[i].tipo).url+'" width="16" height="16" border="0"/>';
	        	tabla += '</td>';
	        	tabla += '<td>';
	        	tabla += '  <span class="inputLBL">'+gestorDirList[i].name+'</span>';
	        	tabla += '</td>';
				tabla += '</tr>';
				}
			}
		tabla += '</table>';
		gestordir_listaPrintDiv.innerHTML = tabla;
	},
	marcarGestorDir: function(gestorDirElement){
		if (gestorDirElement.name==null){
			gestorDirElement.name= "Direccion Nro.: " + gestorDirIndex;
		}
		gestorDirElement.id = gestorDirIndex.toString();
		gestorDirIndex++;
		var lonlat 			= new OpenLayers.LonLat(gestorDirElement.lon,gestorDirElement.lat).transform(this.displayProjection, this.projection);
		var icono 			= mapIcons.getMisPuntosIcon(gestorDirElement.tipo);
		var feature 		= new OpenLayers.Feature(this.gestorDirMarkersLayer, lonlat);
		feature.data.icon = icono;
		gestorDirElement.marker = feature.createMarker();
		this.gestorDirHash.put(gestorDirElement.id,gestorDirElement);
		this.gestorDirMarkersLayer.addMarker(gestorDirElement.marker);
		this.ubicarGestorDir(gestorDirElement.id);
		InitializeGestorDir();
	},
	cleanGestorDirMarkers: function(){
		if (this.gestorDirHash.size() > 0){
			var conf = confirm('Se eliminaran todas la marcas de direccion. Desea continuar de todas formas?');
			if (conf){
				var gestorDirList = this.gestorDirHash.values();
				for (var i=0; i < gestorDirList.length; i++){
					this.gestorDirMarkersLayer.removeMarker(gestorDirList[i].marker);
					gestorDirList[i].marker.destroy();
				}
				this.gestorDirHash.clear();
				this.printTableGestorDir();
			}
		}
	},
	convertGestorDirToPoint: function(idGestorDir){
		if (this.flagConvertGestorDirToPoint)return;
		var gestorDir = this.gestorDirHash.get(idGestorDir.toString());
		if (gestorDir.flagSaveToPoint){
			alert('Esta direccion ya fue guardada en la seccion "Mis Puntos".');
			return;
		}
		this.flagConvertGestorDirToPoint = true;
    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
		var params = { COMMAND: 'SAVE',
					   ORDERID: '',
			           NOMBRE: gestorDir.name,
	    	           LATITUD: gestorDir.lat,
					   LONGITUD: gestorDir.lon,
    				   DATOS: '',
    		           FLOTAID: LOGIN.cuentaFk,
			           ICONO: gestorDir.tipo,
	    	           SEGURO: 0,
			           PUBLICO: 0,
			           ESFLOTA: LOGIN.objetivoDB,
					   GRUPO: 0,
					   OBJETIVO: LOGIN.objetivo,
					   TABLAID: LOGIN.tablaId,
			           OLDGRUPO: 0
					 };
		var myAjax = new MyAjax();
		var onReady = function(req){
							 var results = jQuery.parseJSON(req.responseText);
							 if (results.id != -1) {
							 	gestorDir.flagSaveToPoint = true;
								misPuntosHash.put(results.id.toString(),results);
								cMapController.getMapActive().refreshViewPoints();
								alert('Grabacion realizada con exito!');
							 }
							 cMapController.getMapActive().setFlagConvertGestorDirToPoint(false);
							 $j("#iconoMapa").removeClass().addClass("icono_mapa");
						  }
		var onError = function(req){
							cMapController.getMapActive().setFlagConvertGestorDirToPoint(false);
						    $j("#iconoMapa").removeClass().addClass("icono_mapa");
						  }
		myAjax.send('persistirpunto.php', params, onReady, onError);
	},

	defineSelectorTypeMaps: function(){
		//DEFINICION DEL SELECTOR DE TIPOS DE MAPA
		this.map_selectMapMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Capa', width:'60px'});
		for (var i=0; i<this.mapServerActual.layers.length; i++){
			this.map_selectMapMenu.addItem(this.mapServerActual.layersNames[i], "cMapController.getMapActive().changeMapType("+i+");", "clickMap5('" + this.id + "')" );
		}
		this.oMap.addControl(this.map_selectMapMenu);
	},
	//----------------------------------------------------------------
	changeMapType: function(mapTypeIndex){
		this.oMap.setBaseLayer(this.mapServerActual.layers[mapTypeIndex]);
		this.oMap.updateSize();
	},
	//----------------------------------------------------------------
	changeMapServer: function(mapServerIndex){
		var id = this.id;

		this.map_selectMapMenu.removeAllItems();
		this.oMap.removeControl(this.map_selectMapMenu);
		this.mapServerActual 	= this.mapServers[mapServerIndex];

		/*if(this.mapServerActual.serverName == "Bykom"){
			this.oMap.destroy();
			this.mapBaseType = this.mapServerActual.actualLayer;
			this.oMap = new OpenLayers.Map('map_canvas'+id, this.mapServerActual.mapOptions);
			alert('map_canvas'+id);
			this.projection 		= this.mapServerActual.projection;
			this.displayProjection 	= this.mapServerActual.displayProjection;
			this.oMap.setBaseLayer(this.mapBaseType);

			//DEFINICION DEL SELECTOR DE TIPOS DE MAPA
			this.defineSelectorTypeMaps();
			alert("despues de definirSelector de tipo de mapa");
			//DEFINICION DEL SELECTOR DE SERVIDORES
			if (this.mapServers.length>1){
				var marginRight = parseInt(this.map_selectMapMenu.right) + 105 + 'px';
				this.map_selectServerMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Mapa', width:'62px', right:'129px'});
				for (var l=0; l<this.mapServers.length; l++)
					this.map_selectServerMenu.addItem(this.mapServers[l].serverName,  "cMapController.getMapActive().changeMapServer("+l+");" ,"clickMap5('" + this.id + "')" );
				this.oMap.addControl(this.map_selectServerMenu);
			}
			alert("despues de definirSelector de tipo de servidores");
			this.initControls(id);
			alert("despues de initControls");
			//this.oMap.setCenter(this.getLonLat(),this.getZoomInitialMap());
			alert("despues de setCenter");
			cMapController.initMaps();
			alert("despues de initNewMap");
			cMapController.initMapEvent(id);
			alert("despues de initNewEvent");
		}else{*/
			this.projection 		= this.mapServerActual.projection;
			this.displayProjection 	= this.mapServerActual.displayProjection;
			this.oMap.setBaseLayer(this.mapServerActual.actualLayer);
			this.defineSelectorTypeMaps();
			this.oMap.updateSize();
	//	}
	},
	initServers: function(i){
		//CREAR TODOS LOS OBJETOS SERVER MAPS (MyOlServerMap). Y SETEAR EL SERVER MAP ACTUAL y el MAP BASE TYPE
		if(CAMBIO_DE_MAPA==1){
			mapServer = indexOfArray(mapServersList, toMapType.toString());
			if(mapServer == -1 ){
				mapServer = 0;
			}
		}else{
			mapServer = 0;
		}
		for (var k=0; k< mapServersList.length; k++){
			if(CAMBIO_DE_MAPA==1){
				if (k == mapServer){
					this.mapServers.push(new MyOLServerMap(mapServersList[k]));
					this.mapServerActual = this.mapServers[0];
					//ahora seteo el mapBaseType
					for (var j=0; j<this.mapServerActual.layersTypes.length; j++){
						if (j == 0 && k == 0){
							this.mapBaseType = this.mapServerActual.layers[j];
							j = this.mapServerActual.layersTypes.length;
						}
					}
					if (this.mapBaseType==null)
						this.mapBaseType = this.mapServerActual.actualLayer;
				}
			}else{
				this.mapServers.push(new MyOLServerMap(mapServersList[k]));
				if (k == mapServer){//(k == 0){
					this.mapServerActual = this.mapServers[k];
					//ahora seteo el mapBaseType
					for (var j=0; j<this.mapServerActual.layersTypes.length; j++){
						if (j == 0 && k == 0){
							this.mapBaseType = this.mapServerActual.layers[j];
							j = this.mapServerActual.layersTypes.length;
						}
					}
					if (this.mapBaseType==null)
						this.mapBaseType = this.mapServerActual.actualLayer;
				}
			}
		}
		this.oMap = new OpenLayers.Map('map_canvas'+i, this.mapServerActual.mapOptions);
		for (var l=0; l<this.mapServers.length; l++){
			this.oMap.addLayers(this.mapServers[l].layers);
		}
		this.projection 		= this.mapServerActual.projection;
		this.displayProjection 	= this.mapServerActual.displayProjection;
		this.oMap.setBaseLayer(this.mapBaseType);

		//DEFINICION DEL SELECTOR DE TIPOS DE MAPA
		this.defineSelectorTypeMaps();

		if(CAMBIO_DE_MAPA!=1){
			//DEFINICION DEL SELECTOR DE SERVIDORES
			if (this.mapServers.length>1){
				var marginRight = parseInt(this.map_selectMapMenu.right) + 105 + 'px';
				this.map_selectServerMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Mapa', width:'62px', right:'179px'});
				for (var l=0; l<this.mapServers.length; l++)
					this.map_selectServerMenu.addItem(this.mapServers[l].serverName,  "cMapController.getMapActive().changeMapServer("+l+");" ,"clickMap5('" + this.id + "')" );
				this.oMap.addControl(this.map_selectServerMenu);
			}
		}
		this.oMap.updateSize();
	},

	initControls: function(i){
		this.divContent = "map"+i;
		////////////////////////////////////////////////////////////

		this.oMap.addControl(new OpenLayers.Control.MousePosition());
		this.oMap.Z_INDEX_BASE['Popup']=900;
		//creo e inicio el selectMenu TOOLS
		this.toolMeasure 	= new OpenLayers.Control.ToolMeasure();
		this.oMap.addControl(this.toolMeasure);
		this.toolArea 		= new OpenLayers.Control.ToolArea();
		this.oMap.addControl(this.toolArea );

		this.selectToolsMenu = new OpenLayers.Control.SelectSwitcher({buttonText:'Util', width:'90px', right:'81px'});
		this.selectToolsMenu.addItem('Regla', function(){
															if(cMapController.getMapById(i).getToolArea().isActive){
																cMapController.getMapById(i).getToolArea().deactivate();
															}
															cMapController.getMapById(i).getToolMeasure().activate();
														}, "clickMap5('" + i + "')"
									);
		this.selectToolsMenu.addItem('Area', function(){
														if(cMapController.getMapById(i).getToolMeasure().isActive){
															cMapController.getMapById(i).getToolMeasure().deactivate();
														}
														cMapController.getMapById(i).getToolArea().activate();
														},"clickMap5('" + i + "')"
									);
		this.selectToolsMenu.addItem('Borrar marcas', function(){
											cMapController.getMapById(i).borrarTodasLasMarcas();
										},"clickMap5('" + i + "')"
									);
		this.oMap.addControl(this.selectToolsMenu);

        OpenLayers.Control.CustomNavToolbar = OpenLayers.Class(OpenLayers.Control.Panel, {
		    /**
		     * Constructor: OpenLayers.Control.NavToolbar
		     * Add our two mousedefaults controls.
		     *
		     * Parameters:
		     * options - {Object} An optional object whose properties will be used
		     *     to extend the control.
		     */
		    initialize: function(options) {
		        OpenLayers.Control.Panel.prototype.initialize.apply(this, [options]);
		        this.addControls([
		          new OpenLayers.Control.Navigation(),
				  //Here it come
		          new OpenLayers.Control.ZoomBox({alwaysZoom:true,title:"Zoom Rectangular: Use esta herramienta para hacer zoom sobre un area, haga click y arrastre."})
		        ]);
				// To make the custom navtoolbar use the regular navtoolbar style
				this.displayClass = 'olControlNavToolbarCustom'
		    },
		    /**
		     * Method: draw
		     * calls the default draw, and then activates mouse defaults.
		     */
		    draw: function() {
		        var div = OpenLayers.Control.Panel.prototype.draw.apply(this, arguments);
		        this.activateControl(this.controls[0]);
		        return div;
		    }
		});

        this.panel = new OpenLayers.Control.CustomNavToolbar();
        this.oMap.addControl(this.panel);
        this.panel.activateControl(this.panel.controls[0]);
        this.panel.div.style.zIndex  = 901;

	},

	getZoomInitialMap: function(){
		return this.mapServerActual.zoomInitialMap;
	},


	initLayerSimple: function() {
		this.setVehiculosSimpleLayer(new OpenLayers.Layer.Vector("VehiculosSimpleView"));
		this.setSelectVehiculoSimple(new OpenLayers.Control.SelectFeature(this.getVehiculosSimpleLayer(), {clickout:false, hover:false}));
		this.getVehiculosSimpleLayer().events.on({ "featureselected": this.onSelectVehiculoSimple });
	},

	onSelectVehiculoSimple: function(event) {
		var feature = event.feature;
		alert('1');
		clickMap2( this.id);
		alert('2');
		vehiculoOnClickGuille(event, this.id, feature.attributes.movilId.toString());
		//vehiculoOnClick(event, feature.attributes.movilId.toString());
		alert('3');
		/*cMapController.geMapById(this.id).seleccionarMovil(feature.attributes.movilId);
		cleanAllStates();
    	clickOpcionAcordeon("seleccionActual");
    	RefreshForm();
		//
		this.getSelectVehiculoSimple().unselectAll();
		OpenLayers.Event.stop(event);*/
	},

	guardarConfiguracion: function(mapa,isGral){
		var mapaId 				= this.id;
		var mapaId 				= mapa;
		var vehiculosVisibles 	= this.vehiculosVisiblesId;
		var fijosVisibles	 	= this.fijosVisiblesId;
		var puntosVisibles		= this.misPuntosVisiblesId;
		var zonasVisibles		= this.misZonasVisiblesId;
		var seguimiento			= this.cuentaSelectSegui;
		var seleccion			= this.cuentaSelectSelection;
		var monitoreados		= vehiculosMonitoreadosId;
		var	fijosMonitoreados	= fijosMonitoreadosId;
		var objetivo 	= LOGIN.objetivo;
		var tablaId 	= LOGIN.tablaId;
		$j.ajax({
		      type: "POST",
		      url: "sections/queryConfig.php",
		      data: "COMMAND=GUARDARCONFIGMAPA&MAPAID="+mapaId+"&VEHICULOS="+vehiculosVisibles+"&CUENTAID="+tablaId+"&OBJETIVO="+objetivo+"&FIJOS="+fijosVisibles+"&PUNTOS="+puntosVisibles+"&ZONAS="+zonasVisibles+"&SEGUIMIENTO="+seguimiento+"&SELECCION="+seleccion+"&MONITOREADOS="+monitoreados+"&FIJOSMONITOREADOS="+fijosMonitoreados+"",
		      beforeSend: function(){
				$j('#LoaderAjax').show();
		      },
		      success: function(data) {
		    	$j('#LoaderAjax').hide();
		    	data = jQuery.parseJSON(data);
		    	if(data==true){
		    		if(!isGral){
			    		mapa = mapa + 1;
			    		alert("Se guardo la configuracion correctamente para el mapa "+mapa+".");
		    		}
		    	}else{
		    		alert("No se pudo guardar la configuracion correctamente. Intente mas tarde");
		    	}
		      }
		});
	},

	getConfiguracionByMap: function(mapa,nuevo){
		//var mapaId 		= this.id;
		var mapaId 		= mapa;

		var objetivo 	= LOGIN.objetivo;
		var tablaId 	= LOGIN.tablaId;
		$j.ajax({
			type: "POST",
			url: "sections/queryConfig.php",
			data: "COMMAND=GETCONFIGMAPA&MAPAID="+mapaId+"&CUENTAID="+tablaId+"&OBJETIVO="+objetivo+"",
			beforeSend: function(){
			$j('#LoaderAjax').show();
		},
		success: function(data) {
			$j('#LoaderAjax').hide();
			data = jQuery.parseJSON(data);
			if(data.length>0){
				var movilesVisibles = new Array;
				var fijosVisibles	= new Array;
				var puntosVisibles 	= new Array;
				var zonasVisibles 	= new Array;
				var seleccion	= "-1";
				var seguimiento	= "-1";
				for(var i=0; i<data.length; i++){
					var mapa = data[i].mapa;
					if(data[i].tipo == 1){
						if(misVehiculosHash.get(data[i].id)== null ){
							continue;
						}
						movilesVisibles.push(data[i].id);
						cMapController.addMovilVisiblesGral(data[i].id);
						if(LOGIN.PERMISOS[1]){
							if(data[i].monitoreado==1){
								vehiculosMonitoreadosId.push(data[i].id.toString());
							}
						}
						if(data[i].seleccion==1){
							seleccion = data[i].id;
						}
						if(data[i].seguimiento==1){
							seguimiento = data[i].id;
						}
					}
					if(data[i].tipo == 2){
						if(misFijosHash.get(data[i].id)== null ){
							continue;
						}
						if(LOGIN.PERMISOS[1]){
							if(data[i].monitoreado==1){
								fijosMonitoreadosId.push(data[i].id.toString());
							}
						}
						fijosVisibles.push(data[i].id);
					}
					if(data[i].tipo == 3){
						if(misPuntosHash.get(data[i].id)== null ){
							continue;
						}
						puntosVisibles.push(data[i].id);
					}
					if(data[i].tipo == 4){
						if(misZonasHash.get(data[i].id)== null ){
							continue;
						}
						zonasVisibles.push(data[i].id);
					}
				}

				cMapController.getMapById(mapaId).setVehiculosVisiblesId(movilesVisibles);
				cMapController.getMapById(mapaId).setSeleccionActual(seleccion);
				cMapController.getMapById(mapaId).setCuentaSeguimiento(seguimiento);
				cMapController.getMapById(mapaId).setFijosVisiblesId(fijosVisibles);
				cMapController.getMapById(mapaId).setPuntosVisiblesId(puntosVisibles);
				cMapController.getMapById(mapaId).setZonasVisiblesId(zonasVisibles);
				cMapController.updateMovilVisiblesGral();
			}else{
				//alert("No se pudo recuperar la configuracion del/de los mapa/s.");
			}
			if(nuevo){
				inicializarNuevoMapa(mapaId);
			}

			/**
			 * Actualizo las tablas para que muestren los iconos correspondientes
			 */
			if(LOGIN.objetivoDB != 1){
				cMapController.getMapById(mapaId).refreshViewMisVehiculos();
			}
			if (LOGIN.objetivoDB == 5 || LOGIN.objetivoDB == 1){
				cMapController.getMapById(mapaId).refreshViewMisFijos();
			}
			if (LOGIN.PERMISOS[4]){
				cMapController.getMapById(mapaId).refreshViewPoints();
			}
			if (LOGIN.PERMISOS[5]){
				cMapController.getMapById(mapaId).refreshViewZonas();
			}
			/*****/
			mapaCargado = true;
		}
		});
	},

	removePopup: function(){
		if (this.misPopups!=null){
			this.oMap.removePopup(this.misPopups);
			this.misPopups.destroy();
			this.misPopups = null;
		}
	},
	openInfoEvento: function(point, html){
		var mapaId = this.id;
		this.removePopup();
		this.misPopups = new OpenLayers.Popup.FramedCloud("popupEvento",point, null, html, null, true, function(){cMapController.getMapById(mapaId).removePopup();});
		this.oMap.addPopup(this.misPopups);
		this.misPopups.div.style.zIndex = 903;
	},

	OnReadyStateChangeDeleteMisGrupos: function(){
		ready = reqHandlerDeleteMisGrupos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			deleteResponse = jQuery.parseJSON(reqHandlerDeleteMisGrupos.responseText);
			if (deleteResponse){
				if(deleteGrupoId!=null){
					var grupo = misGruposHash.get(deleteGrupoId.toString());

				 	//ahora remuevo los puntos y las marcas que ya fueron eliminadas de sus respectivos arrays
					for (var i=0; i<grupo.PUNTOSID.length; i++)
						misPuntosHash.get(grupo.PUNTOSID[i].toString()).grupoId=0;	//dejo los puntos en el directorio raiz...
					misGruposHash.remove(deleteGrupoId.toString());
					deleteGrupoId = null;
				}
				cMapController.getMapActive().refreshViewPoints();
			}
			else {
				alert ("Error en consulta a DB: No se pudo eliminar el/los grupos seleccionados");
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	},
	eliminarGrupos: function(idGrupo) {
		deleteGrupoId = null;
		conf = confirm('Esta a punto de eliminar el/los grupos seleccionados y todos los puntos que este contiene. ¿Desea continuar de todas formas?');
		if (conf){
	    	reqParamsMisGrupos = "COMMAND=DELETEGROUP";
    		reqParamsMisGrupos += "&ORDERID="+idGrupo;
    		reqParamsMisGrupos += "&ISBYKOM="+LOGIN.isBykom;
			deleteGrupoId = idGrupo;
			autoRefreshFlag = 1;
    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    		if (msie)
	    	    reqHandlerDeleteMisGrupos = new ActiveXObject("Microsoft.XMLHTTP");
    	    else
	    	    reqHandlerDeleteMisGrupos = new XMLHttpRequest();
        	reqHandlerDeleteMisGrupos.onreadystatechange = this.OnReadyStateChangeDeleteMisGrupos;
	        reqHandlerDeleteMisGrupos.open("POST", "persistirpunto.php", true);
		    reqHandlerDeleteMisGrupos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerDeleteMisGrupos.send(reqParamsMisGrupos);
		}
	},
	OnReadyStateChangeSaveMisGrupos: function(){
		ready = reqHandlerSaveMisGrupos.readyState;
		if (ready == READY_STATE_COMPLETE) {
			nuevoGrupoJSON = jQuery.parseJSON(reqHandlerSaveMisGrupos.responseText);
			if (nuevoGrupoJSON.id != -1) {
				misGruposHash.put(nuevoGrupoJSON.id.toString(),nuevoGrupoJSON);
				alert('Grabacion realizada con exito!');
				cleanEstadoNuevoGrupo();
				cMapController.getMapActive().refreshViewPoints();
			}
			else{
				document.getElementById('newGroupErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar el grupo.'
				showDiv('newGroupErrorDisplay');
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	},
	guardarGrupo: function() {
		hideDiv('newGroupErrorDisplay');
		document.getElementById("newGroupErrorDisplay").innerHTML = "";
		if (validarNuevoGrupo()){
			es_flota = 0;
			if (parseInt(LOGIN.objetivoDB) == 3){
				es_flota=1;
			}
	    	reqParamsMisGrupos = "COMMAND=SAVEGROUP";
    		reqParamsMisGrupos += "&ORDERID="+document.getElementById('grupoIdHID').value;
			reqParamsMisGrupos += "&NOMBRE="+document.getElementById('nombreGrupo').value;
    		reqParamsMisGrupos += "&DATOS="+document.getElementById('descGrupo').value;
    		reqParamsMisGrupos += "&FLOTAID="+LOGIN.cuentaFk;
			reqParamsMisGrupos += "&ESFLOTA="+LOGIN.objetivoDB;
			reqParamsMisGrupos += "&TABLAID="+LOGIN.tablaId;
			reqParamsMisGrupos += "&OBJETIVO="+LOGIN.objetivo;
			reqParamsMisGrupos += "&ISBYKOM="+LOGIN.isBykom;
    		autoRefreshFlag = 1;
	    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    		if (msie)
        	    reqHandlerSaveMisGrupos = new ActiveXObject("Microsoft.XMLHTTP");
	        else
    	        reqHandlerSaveMisGrupos = new XMLHttpRequest();
			reqHandlerSaveMisGrupos.onreadystatechange = this.OnReadyStateChangeSaveMisGrupos;
	        reqHandlerSaveMisGrupos.open("POST", "persistirpunto.php", true);
    	    reqHandlerSaveMisGrupos.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerSaveMisGrupos.send(reqParamsMisGrupos);
		}
    },
    ocultarPuntosVisibles: function(){
		for (i=0; i<this.misPuntosVisiblesId.length; i++){
			var marker = this.misPuntosMarkersHash.get(this.misPuntosVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.display(false);
			}
		}
	},

	mostrarPuntosVisibles: function(){
		for (i=0; i<this.misPuntosVisiblesId.length; i++){
			var marker =  this.misPuntosMarkersHash.get(this.misPuntosVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.display(true);
			}
		}
	},

	mostrarPunto: function(idPunto){
		this.misPuntosVisiblesId.push(idPunto.toString());
		this.refreshViewPoints();
	},

	ocultarPunto: function(idPunto){
		pos=indexOfArray(this.misPuntosVisiblesId,idPunto.toString());
		if (pos!=-1)
			this.misPuntosVisiblesId.splice(pos,1);
		this.refreshViewPoints();
	},
	/************************************************
	 * 					RUTAS						*
	 ***********************************************/
	printTableMisRutas: function(){
		tabla = '<table width="100%" border="0" cellpadding="5" cellspacing="0" >';
		var misRutasList = misRutasHash.values();
		var sortArray = new SortArray(misRutasList,"QUICKSORT");
		sortArray.ordenar(orderTypeMisRutas,'nombre');
		for (var i=0; i<misRutasList.length; i++){
			if (misRutasList[i]!='toJSONString'){
			var checked = '';
			if (indexOfArray(this.rutasSeleccionadasId,misRutasList[i].id.toString())!=-1){
				checked='checked';
			}
			var functionCheck = "cMapController.getMapActive().checkedRuta";
			var bgColor = "transparent";
			tabla += '<tr oncontextmenu="return createPopUpRuta(event,'+misRutasList[i].id+',this,true);">';
			tabla += '<td valign="middle" width="16">';
   			tabla += " <input type='checkbox' name='boxZones[]' value='"+misRutasList[i].id+"' "+checked+" onClick='"+functionCheck+"(this);'>";
        	tabla += '</td>';
        	tabla += '<td valign="middle" width="16">';
			tabla += '  <div style="border:1px solid #8E8F8F; width:11px; height:11px; margin-top:-3px; background:#'+misRutasList[i].color+'"> </div>';
        	tabla += '</td>';
        	tabla += '<td>';
        	tabla += ' <span class="inputLBL" style="background:'+bgColor+';">'+misRutasList[i].nombre+'</span>';
        	tabla += '</td>';

			tabla += '<td align="right">';

			//seccion de iconos de estado...
			tabla += '<table border="0" cellpadding="0" cellspacing="1" ><tr>';

			//VISIBILIDAD:
			tabla += '<td width="20" height="20" align="center" valign="middle" style="background-color:#F0F0F0;">';

			if (indexOfArray(this.misRutasVisiblesId,misRutasList[i].id.toString())!=-1){
				tabla += '<img src="images/rutaVisible.gif" border="0" onclick="cMapController.getMapActive().highlightRutaMarker('+misRutasList[i].id.toString()+');" style="cursor:pointer;" title="Ruta visible (Click para localizar y centrar)"/>';
				}
			tabla += '</td>';
			tabla += '</tr></table>';
        	tabla += '</td>';
			tabla += '</tr>';
			}
		}
		tabla += '</table>';
		document.getElementById('divListaRutas').innerHTML = tabla;
	},
	createRutaMarker: function(idRuta){ //crea y retorna un Poligon dado un ID de una ruta
		var miRuta = misRutasHash.get(idRuta.toString());
		var limites = new Array();
		for (var i=0; i<miRuta.PUNTOSLAT.length; i++){
			var geoPoint = new OpenLayers.Geometry.Point(miRuta.PUNTOSLNG[i],miRuta.PUNTOSLAT[i]).transform(this.displayProjection, this.projection);
			limites[i]=geoPoint;
		}
		var lineString = new OpenLayers.Geometry.LineString(limites);
		var feature = new OpenLayers.Feature.Vector(lineString,null,{
            strokeColor: "#"+miRuta.color,
			fillColor: "#"+miRuta.color,
            strokeOpacity: 0.8,
			fillOpacity: 0.2,
            strokeWidth: 5
        });
		var layerRuta = new OpenLayers.Layer.Vector("RUTA_"+idRuta);

		layerRuta.addFeatures(feature);
		layerRuta.div.style.zIndex=800;
		return layerRuta;
	},
	refreshViewRutas: function(){
		if(LOGIN.PERMISOS[20]){
			var misRutasList = misRutasHash.values();
			for (var i=0; i < misRutasList.length; i++) {
				if (misRutasList[i]!='toJSONString'){
					var auxId = misRutasList[i].id.toString();
					var layerRuta = this.misRutasMarkersHash.get(auxId);
					if (indexOfArray(this.misRutasVisiblesId,auxId.toString())!=-1){ // Tiene que estar VISIBLE
						if ((layerRuta == null)||(layerRuta=='undefined')){//creo la marca de la ruta
							layerRuta = this.createRutaMarker(auxId.toString());
							this.misRutasMarkersHash.put(auxId.toString(),layerRuta);
						}
						this.oMap.addLayer(layerRuta);
					}else{ //tiene que estar OCULTO
						if ((layerRuta != null)&&(this.oMap.getLayer(layerRuta.id)!=null)){
							this.oMap.removeLayer(layerRuta);
						}
					}
				}
			}
			if (misRutasList.length>0){
				this.printTableMisRutas();
			}else{
				document.getElementById('divListaRutas').innerHTML = '<span class="inputLBL">No se encontraron rutas registradas.</span>';
			}
		}
	},
	clearNewRuta: function(){
		this.puntosRutaIniFin = new Array();
		// Remueve la ruta del mapa y resetea los arrays
		if (this.newRutaMarkersLayer!=null){
			this.newRutaPolygonLayer.destroyFeatures();
			this.newRutaMarkersLayer.clearMarkers();
			this.newRutaMarkers.length = 0;
			this.newRutaPoints.length = 0;
		}
		//remuevo la capa y las marcas de inicio y fin del mapa para buscar por direccion
		if(this.searchRutasLayer!=null){
			this.searchRutasLayer.destroyFeatures();
			if(this.searchRutasMarkers!=null){
				this.searchRutasMarkers.clearMarkers();
			}
		}
		this.verOpcionesCreacionRuta();
	},

	nuevaRuta: function() {
		this.bModoABMRutas = true;
		dejarDeSeguir();
		//mostrar panel de nueva ruta
		document.getElementById('newRutaTitle').innerHTML = "Nueva Ruta";
		document.getElementById('newRutaDesc').innerHTML = "Haga clic en al menos en 2 lugares diferentes del mapa para dibujar una ruta. Los ángulos de la ruta son arrastrables y extraíbles. Puede añadir más vértices simplemente haciendo 'click' o eliminarlos con 'doble click' sobre el vertice que desee."
		hideDiv('div_misrutasPpal');
		showDiv('div_nuevaRuta');
		this.setEstadoNuevaRuta();
		this.cleanFormNuevaRuta();
		this.newRutaPoints = new Array();
		this.newRutaMarkers = new Array();
		this.isNewRuta = true;
		//newRutaShape = null;
		if(!cGeoController.implementaRouting()){
			this.verOpcionesCreacionRuta();
		}
	},

	cleanEstadoNuevaRuta: function(){ //limpia el mapa del estado "MARCAR NUEVA RUTA"
		this.puntosRutaIniFin = new Array();
		this.bModoABMRutas = false;
		if (this.dragUpdateRutaMarkersEvents!=null){
			this.dragUpdateRutaMarkersEvents.deactivate();
			this.oMap.removeControl(this.dragUpdateRutaMarkersEvents);
			this.dragUpdateRutaMarkersEvents.destroy();
			this.dragUpdateRutaMarkersEvents=null;
		}
	    if (this.newRutaPolygonLayer!=null){
	    	this.oMap.removeLayer(this.newRutaPolygonLayer);
	    	this.newRutaPolygonLayer.destroy();
	    	this.newRutaPolygonLayer = null;
	    	this.oMap.removeLayer(this.newRutaMarkersLayer);
			this.newRutaMarkersLayer.destroy();
			this.newRutaMarkersLayer = null;
		}
		if(this.newRutaEvents!=null)
			this.newRutaEvents.deactivate();
		this.defaultEvents.activate();
		hideDiv('div_nuevaRuta');
		showDiv('div_misrutasPpal');
		this.clearNewRuta();
		this.oMap.div.style.cursor = "default";
		this.refreshViewRutas();
		if(this.rutaDesdeHistorico){
			this.limpiarPuntosRutaDeHistorico();
		}
	},
	setEstadoNuevaRuta: function(){ //prepara el mapa para el estado "MARCAR NUEVA Ruta"
		if(this.newRutaMarkersLayer!=null){
			this.newRutaMarkersLayer.clearMarkers();
		}
		this.newRutaPolygonLayer = new OpenLayers.Layer.Vector("Nueva Ruta Polygon");
		this.oMap.addLayer(this.newRutaPolygonLayer);
		this.newRutaMarkersLayer = new OpenLayers.Layer.Markers("Nueva Ruta Markers");
		this.oMap.addLayer(this.newRutaMarkersLayer);
		if (this.newRutaEvents==null){
			this.newRutaEvents = new OpenLayers.Control.NewRuta();
			this.oMap.addControl(this.newRutaEvents);
		}
		this.defaultEvents.deactivate();
		this.newRutaEvents.activate();
		this.dragUpdateRutaMarkersEvents = new OpenLayers.Control.DragMarker(cMapController.getMapActive().getNewRutaMarkersLayer(), {
											'onStart': function() {
																	cMapController.getMapActive().addChangeNuevaRuta();
																},
											'onComplete': function() {
																cMapController.getMapActive().addChangeNuevaRuta();
																cMapController.getMapActive().drawNewRuta();
															}
											});
		this.oMap.addControl(this.dragUpdateRutaMarkersEvents);
		this.dragUpdateRutaMarkersEvents.activate();
		this.oMap.div.style.cursor = "crosshair";
	},
	cleanFormNuevaRuta: function(){
		this.rutaDesdeMovil = false;
		if(this.rutaDesdeHistorico){
			this.limpiarPuntosRutaDeHistorico();
		}
		hideDiv('newRutaErrorDisplay');
		document.getElementById("newRutaErrorDisplay").innerHTML = "";
		document.getElementById('rutaIdHID').value="";
		document.getElementById('rutaArea').innerHTML="0 km";
		document.getElementById('descRuta').value="";
		document.getElementById('nombreRuta').value="";
		document.getElementById('colorRutaId').value=COLOR_DEFAULT_ZONA_GMAP;
		document.getElementById('colorRutaText').style.background='#'+COLOR_DEFAULT_ZONA_GMAP;
		
		document.getElementById('rutaPuntoCiudad').value = GEO_CIUDAD;
		document.getElementById('rutaPuntoProvincia').value = GEO_PROVINCIA;
		document.getElementById('rutaPuntoPais').value = GEO_PAIS;
		document.getElementById('rutaPuntoCiudadDest').value = GEO_CIUDAD;
		document.getElementById('rutaPuntoProvinciaDest').value = GEO_PROVINCIA;
		document.getElementById('rutaPuntoPaisDest').value = GEO_PAIS;
		this.clearNewRuta();
		this.newRutasHistorial = new Array();
	},
	rutaAddVertice: function(point, datos, rutaPorDir){
	   if(point){
			this.puntosRutaIniFin = new Array();
		    // vertice marker icons
			var size 		= new OpenLayers.Size(11,11);
			var offset 		= new OpenLayers.Pixel(-(size.w/2), -(size.h));
			var icon 		= new OpenLayers.Icon('images/vertice.png', size, offset);
			var markerVertice = new OpenLayers.Marker(point,icon);
			markerVertice.events.register('mouseover', markerVertice, function(evt) {
										markerVertice.setUrl('images/verticeHover.png');
									});
			markerVertice.events.register('mouseout', markerVertice, function(evt) {
										markerVertice.setUrl('images/vertice.png');
									});
			markerVertice.events.register('dblclick', markerVertice, function(evt) { // Encontrar el vertice y removerlo
									  for(var n = 0; n < cMapController.getMapActive().getNewRutaMarkers().length; n++) {
										 if(cMapController.getMapActive().getNewRutaMarkers()[n] == markerVertice) {
											 cMapController.getMapActive().addChangeNuevaRuta();
											 cMapController.getMapActive().getNewRutaMarkersLayer().removeMarker(cMapController.getMapActive().getNewRutaMarkers()[n]);
											 break;
										 }
									   }
									  cMapController.getMapActive().getNewRutaMarkers().splice(n, 1);
									  cMapController.getMapActive().drawNewRuta();
								 });
	
			if(datos != undefined && datos != null && datos != ""){
				markerVertice.events.register("click", markerVertice, function() {
					cMapController.getMapActive().openInfoEvento(point, cMapController.getMapActive().getInfoMisPuntosEnRutasHTML("Info",datos) );
		        });
			}
			var cant = this.newRutaMarkers.length;
			if(cant>1){
				for(var i=cant-2;i<cant;i++){
					if(this.newRutaMarkers[i].icon.url.toString() != "images/vertice.png"){
						this.newRutaMarkers[i].icon.offset = offset;
						this.newRutaMarkers[i].icon.setUrl('images/vertice.png');
						this.newRutaMarkers[i].icon.setSize(size);
					}
				}
			}
			this.newRutaMarkers.push(markerVertice);
			this.newRutaMarkersLayer.addMarker(markerVertice);
			if(rutaPorDir == undefined){
				//this.addChangeNuevaRuta();
				var cloneMarker = new OpenLayers.Marker(markerVertice.lonlat.clone(),markerVertice.icon.clone());
				this.newRutasHistorial.push(cloneMarker);
				if(this.isNewRuta){
					this.drawNewRuta();
				}
			}
	    }
	},
	rutaAddVerticeIniFin: function(point, datos) {
		if(point){
			// vertice marker icons
			var size 		= new OpenLayers.Size(20,34);
			var offset 		= new OpenLayers.Pixel(-(size.w/2), -(size.h));
			if(this.puntosRutaIniFin.length == 0){
				var icon 		= new OpenLayers.Icon('images/gmapIcons/markerA.png', size, offset);
			}else if(this.puntosRutaIniFin.length == 1){
				var icon 		= new OpenLayers.Icon('images/gmapIcons/markerB.png', size, offset);
			}
			var markerVertice = new OpenLayers.Marker(point,icon);
			markerVertice.events.register('mouseover', markerVertice, function(evt) {
				//markerVertice.setUrl('images/verticeHover.png');
			});
			markerVertice.events.register('mouseout', markerVertice, function(evt) {
				//markerVertice.setUrl('images/vertice.png');
			});
			markerVertice.events.register('dblclick', markerVertice, function(evt) { // Encontrar el vertice y removerlo
				for(var n = 0; n < cMapController.getMapActive().getNewRutaMarkers().length; n++) {
					if(cMapController.getMapActive().getNewRutaMarkers()[n] == markerVertice) {
						cMapController.getMapActive().addChangeNuevaRuta();
						cMapController.getMapActive().getNewRutaMarkersLayer().removeMarker(cMapController.getMapActive().getNewRutaMarkers()[n]);
						break;
					}
				}
				cMapController.getMapActive().getNewRutaMarkers().splice(n, 1);
				cMapController.getMapActive().drawNewRuta();
			});
			this.newRutaMarkers.push(markerVertice);
			var lonlat = markerVertice.lonlat.clone().transform(this.projection, this.displayProjection);
			this.puntosRutaIniFin.push(lonlat);
			this.newRutaMarkersLayer.addMarker(markerVertice);
			if(this.puntosRutaIniFin.length == 2){
				getRutasFromIniFin(this.puntosRutaIniFin[0], this.puntosRutaIniFin[1]);
				if(this.rutaDesdeMovil){
					this.puntosRutaIniFin.splice(1,1);
				}else{
					this.clearNewRuta();
				}
			}
		}
	},

	rutaAddVerticeEnHistorico: function(point, datos) {
		if(point){
			// vertice marker icons
			var size 		= new OpenLayers.Size(20,34);
			var offset 		= new OpenLayers.Pixel(-(size.w/2), -(size.h));
			var elementos = document.getElementsByName("iniFin");
    		for(var i=0; i<elementos.length; i++) {
    			if(elementos[i].checked){
    				tipoCreacionRuta = elementos[i].value;
    				break;
    			}
    		}
    		var markerAnt = null;
			if(tipoCreacionRuta==1){
				var icon 		= new OpenLayers.Icon('images/gmapIcons/markerA.png', size, offset);
				markerAnt = this.markersRutaHistorico[0];
			}else if(tipoCreacionRuta==2){
				var icon 		= new OpenLayers.Icon('images/gmapIcons/markerB.png', size, offset);
				markerAnt = this.markersRutaHistorico[1];
			}

			var markerVertice = new OpenLayers.Marker(point,icon);
			
			if( cMapController.getMapActive().getNewRutaMarkers().length > 0 ){
				for(var n = 0; n < cMapController.getMapActive().getNewRutaMarkers().length; n++) {
					if(cMapController.getMapActive().getNewRutaMarkers()[n] == markerAnt) {
						cMapController.getMapActive().addChangeNuevaRuta();
						cMapController.getMapActive().getNewRutaMarkersLayer().removeMarker(cMapController.getMapActive().getNewRutaMarkers()[n]);
						break;
					}
				}
				cMapController.getMapActive().getNewRutaMarkers().splice(n, 1);
			}
			if(tipoCreacionRuta==1){
				this.markersRutaHistorico[0] = markerVertice;
			}else if(tipoCreacionRuta==2){
				this.markersRutaHistorico[1] = markerVertice;
			}
			
			this.newRutaMarkers.push(markerVertice);
			var lonlat = markerVertice.lonlat.clone().transform(this.projection, this.displayProjection);
			this.newRutaMarkersLayer.addMarker(markerVertice);
		}
	},
	drawNewRuta: function(){
		this.newRutaPolygonLayer.destroyFeatures();
		this.newRutaPoints.length = 0;
		var limites 		= new Array();
	    for(var i = 0; i < this.newRutaMarkers.length; i++){
	    	this.newRutaPoints.push(this.newRutaMarkers[i].lonlat.clone().transform(this.projection, this.displayProjection));
	    	var geoPoint 	= new OpenLayers.Geometry.Point(this.newRutaMarkers[i].lonlat.lon,this.newRutaMarkers[i].lonlat.lat);
	    	limites[i]		= geoPoint;
		}
		var lineString	= new OpenLayers.Geometry.LineString(limites);
		var feature 	= new OpenLayers.Feature.Vector(lineString,null,{
            strokeColor: this.newRutaLineColor,
			fillColor: "#"+document.getElementById('colorRutaId').value,
            strokeOpacity: 1,
			fillOpacity: 0.2,
            strokeWidth: 5
        });
		distancia = lineString.getGeodesicLength(this.projection);
		if(distancia>0){
			distancia = distancia/1000;
		}
//		var inPerDisplayUnit = OpenLayers.INCHES_PER_UNIT['km'];
//        if(inPerDisplayUnit) {
//            var inPerMapUnit = OpenLayers.INCHES_PER_UNIT[this.oMap.units];
//            distancia *= Math.pow((inPerMapUnit / inPerDisplayUnit), 2);
//        }
		if(this.newRutaMarkers.length < 2 ){
		  document.getElementById('rutaArea').innerHTML="0 km";
		}else if(this.newRutaMarkers.length >= 2 ){
		  document.getElementById('rutaArea').innerHTML=distancia.toFixed(2)+" km";
		}
		this.newRutaPolygonLayer.addFeatures(feature);
	},
	addChangeNuevaRuta: function(){
		var cloneArray = new Array();
		for(var i=0; i<this.newRutaMarkers.length; i++){
			var cloneMarker = new OpenLayers.Marker(this.newRutaMarkers[i].lonlat.clone(),this.newRutaMarkers[i].icon.clone());
			//cloneArray[i] = cloneMarker;
			this.newRutasHistorial.push(cloneMarker);
		}
	},
	removeChangeNuevaRuta: function(){
		if(this.newRutasHistorial.length>1){
			this.newRutaMarkersLayer.clearMarkers();
			//this.newRutaMarkers = this.newRutasHistorial[this.newRutasHistorial.length-2];
			this.newRutasHistorial.pop();
			this.newRutaMarkers = this.newRutasHistorial;
			for(var i=0;i<this.newRutaMarkers.length;i++){
				this.newRutaMarkersLayer.addMarker(this.newRutaMarkers[i]);
			}
			//this.newRutasHistorial.length = this.newRutasHistorial.length-1;
			this.drawNewRuta();
		}else{
			if(document.getElementById('rutaIdHID').value=='')
				this.cleanFormNuevaRuta();
			else
				this.cleanFormModificarRuta();
		}
	},
	validarNuevaRuta: function(){
		errorMsg = '';
		countPuntos = this.newRutaPoints.length;
		desc = document.getElementById("descRuta").value;
		nombre = document.getElementById("nombreRuta").value;

		if (countPuntos<2)
			errorMsg += "Debe marcar al menos 2 puntos para grabar una ruta.<br>";

		if (trim(nombre)!=''){
			if (!_validString(nombre))
				errorMsg += "El campo 'nombre' no acepta caracteres especiales.<br>";
			}
		else
			errorMsg += "El campo 'nombre' es obligatorio.<br>";

		if (trim(desc)!=''){
			if (!_validString(desc))
				errorMsg += "El campo 'descripcion' no acepta caracteres especiales.<br>";
		}

		if(LOGIN.isBykom){
			var tolerancia = $j("#toleranciaMisRuta").val();
			if(tolerancia == ""){
				errorMsg += "El campo 'tolerancia' es obligatorio.<br>";
			}
		}
		
		if (errorMsg == '')
			return true;
		document.getElementById("newRutaErrorDisplay").innerHTML = errorMsg;
		showDiv("newRutaErrorDisplay");
		return false;
	},
	cleanFormModificarRuta: function(){
		this.clearNewRuta();
		hideDiv('newRutaErrorDisplay');
		document.getElementById("newRutaErrorDisplay").innerHTML = "";
		var rutaId = document.getElementById('rutaIdHID').value;
		rutaModificar = misRutasHash.get(rutaId.toString());
		document.getElementById('rutaArea').innerHTML	= "0 km";
		document.getElementById('descRuta').value		= rutaModificar.descripcion;
		document.getElementById('nombreRuta').value		= rutaModificar.nombre;
		document.getElementById('colorRutaId').value	= rutaModificar.color;
		document.getElementById('colorRutaText').style.background='#'+rutaModificar.color;
		if(LOGIN.isBykom){
			$j("#toleranciaMisRuta").val(rutaModificar.tolerancia);
		}
		//creo los vertices a partir de los puntos que tenemos guardados.
		this.isNewRuta = false;
        for (i=0; i<rutaModificar.PUNTOSLAT.length; i++){
		    var lonlat = new OpenLayers.LonLat(parseFloat(rutaModificar.PUNTOSLNG[i]),parseFloat(rutaModificar.PUNTOSLAT[i])).transform(this.displayProjection, this.projection);
			this.rutaAddVertice(lonlat,null,true);
		}
        this.newRutasHistorial = new Array();
        this.addChangeNuevaRuta();
        this.drawNewRuta();
        this.centrarNewRuta();
        this.isNewRuta = true;
	},

	modificarRuta: function(idRuta) {
		if(!cGeoController.implementaRouting()){
			$j("#rutaDireccion").hide();
			$j("#RutaManual").show();	
			$j("#RutaPorDireccion").hide();	
		}
		if (idRuta!=null){
			this.bModoABMRutas 	= true;
			this.rutaDesdeMovil = false;
			this.rutaDesdeHistorico = false;
			dejarDeSeguir();
			//mostrar panel de nueva ruta
			document.getElementById('newRutaTitle').innerHTML = "Modificar Ruta";
			document.getElementById('newRutaDesc').innerHTML = "Para modificar la ruta tenga en cuenta que los ángulos son arrastrables y extraíbles. Puede añadir más vértices haciendo 'click'. Tenga en cuenta que los nuevos vertices se uniran a partir del ultimo que ha sido creado.";
			hideDiv('div_misrutasPpal');
			showDiv('div_nuevaRuta');
			this.setEstadoNuevaRuta();
			rutaModificar = misRutasHash.get(idRuta.toString());
			this.clearNewRuta();
			pos = indexOfArray(this.misRutasVisiblesId, rutaModificar.id.toString());
			if (pos!=-1) //La marca de ruta estaba visible
				this.oMap.removeLayer(this.misRutasMarkersHash.get(rutaModificar.id.toString())); //remuevo la layer a modificar del mapa
			//inicializo el form
			hideDiv('newRutaErrorDisplay');
			document.getElementById("newRutaErrorDisplay").innerHTML = "";
			document.getElementById('rutaIdHID').value	= rutaModificar.id;
			this.cleanFormModificarRuta();
		}
	},
	centrarNewRuta: function(){
		if (this.newRutaPolygonLayer.features.length>0){
			this.centrarEnBounds(this.newRutaPolygonLayer.features[0].geometry.getBounds());
		}
	},
	ocultarRutasVisibles: function(){
		for (i=0; i < this.misRutasVisiblesId.length; i++){
			var marker = this.misRutasMarkersHash.get(this.misRutasVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.hide();
			}
		}
	},
	mostrarRutasVisibles: function(){
		for (i=0; i<this.misRutasVisiblesId.length; i++){
			var marker = this.misRutasMarkersHash.get(this.misRutasVisiblesId[i].toString());
			if ((marker!=null)&&(marker!='undefined')){
				marker.show();
			}
		}
	},
	ocultarRuta: function(idRuta){
		pos=indexOfArray(this.misRutasVisiblesId,idRuta.toString());
		if (pos!=-1)
			this.misRutasVisiblesId.splice(pos,1);
		this.refreshViewRutas();
	},
	mostrarRuta: function(idRuta){
		this.misRutasVisiblesId.push(idRuta.toString());
		this.refreshViewRutas();
	},
	checkedRuta: function(check, miRuta){
		if (check.checked){
			this.rutasSeleccionadasId.push(check.value);
		}else {
			pos=indexOfArray(this.rutasSeleccionadasId,check.value.toString());
			if (pos!=-1){
				this.rutasSeleccionadasId.splice(pos,1);
			}
		}
	},
	verRutasSeleccionadas: function(){
		this.misRutasVisiblesId = new Array();
		for (var i=0; i < this.rutasSeleccionadasId.length;i++){
			this.misRutasVisiblesId[i] = this.rutasSeleccionadasId[i];
		}
		this.refreshViewRutas();
	},
	ocultarRutasSeleccionadas: function(){
		for (var i=0;i < this.rutasSeleccionadasId.length;i++){
			pos=indexOfArray( this.misRutasVisiblesId, this.rutasSeleccionadasId[i].toString());
			if (pos!=-1){
				 this.misRutasVisiblesId.splice(pos,1);
			}
		}
		this.refreshViewRutas();
	},
	eliminarRutas: function(rutaId) {
		var sRutas = "";
		 if ((this.rutasSeleccionadasId.length>0)||(rutaId!=null)){
			if(rutaId!=null){
				sRutas = rutaId;
			}else{
				sRutas = this.rutasSeleccionadasId.join(",");
			}
		}
		$j.ajax({
			type: "POST",
			url: "querycontroller.php",
			data: "COMMAND=VERIFICAREGLA&IDENTIFICADOR="+sRutas+"&TIPOREGLA=2&ISBYKOM="+LOGIN.isBykom+"",
			beforeSend: function(){
			},
			success: function(data) {
				$j('#LoaderAjax').hide();
				data = jQuery.parseJSON(data);
				if(data!=0){
					alert("No puede eliminar una ruta que tiene una logistica asociada");
				}else{
					cMapController.getMapActive().eliminarRutasOK(rutaId);
				}
			}
		});
	},
	eliminarRutasOK: function(rutaId) {
		 deleteRutaId = null;
		 if ((this.rutasSeleccionadasId.length>0)||(rutaId!=null)){
			conf = confirm('Esta a punto de eliminar la/las rutas seleccionadas. ¿Desea continuar de todas formas?');
			if (conf){
				var iRutaId = "";
				if (rutaId!=null){
					iRutaId =  rutaId.toString()
					deleteRutaId = rutaId.toString();
				}else
					iRutaId = this.rutasSeleccionadasId.join(",");

				$j.ajax({
					type: "POST",
					url: "persistirruta.php",
					data: "COMMAND=DELETE&CUENTAID="+LOGIN.tablaId+"&OBJETIVO="+LOGIN.objetivo+"&ORDERID="+iRutaId+"&ISBYKOM="+LOGIN.isBykom+"",
					beforeSend: function(){
					},
					success: function(data) {
						$j('#LoaderAjax').hide();
						data = jQuery.parseJSON(data);
						autoRefreshFlag = 1;
						$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
						if (data){
							if(deleteRutaId==null){ //se ejecuto con minimenu
							 	cMapController.getMapActive().ocultarRutasSeleccionadas();
				  			    //ahora remuevo las rutas y las marcas que ya fueron eliminadas de sus respectivos arrays
							 	for (var i=0; i < cMapController.getMapActive().getRutasSeleccionadasId().length; i++){
									misRutasHash.remove(cMapController.getMapActive().getRutasSeleccionadasId()[i].toString());
								 	if (cMapController.getMapActive().getMisRutasMarkersHash().containsKey(cMapController.getMapActive().getRutasSeleccionadasId()[i].toString())){
										 if (cMapController.getMapActive().getMap().getLayerIndex(cMapController.getMapActive().getMisRutasMarkersHash().get(cMapController.getMapActive().getRutasSeleccionadasId()[i].toString()))!=-1)
										 	cMapController.getMapActive().getMap().removeLayer(cMapController.getMapActive().getMisRutasMarkersHash().get(cMapController.getMapActive().getRutasSeleccionadasId()[i].toString()));
										 cMapController.getMapActive().getMisRutasMarkersHash().remove(cMapController.getMapActive().getRutasSeleccionadasId()[i].toString());
								 	}
							 	}
							 	cMapController.getMapActive().setRutasSeleccionadasId( new Array());
							}else{ //se ejecuto desde POPUP MENU
								pos=indexOfArray(cMapController.getMapActive().getRutasSeleccionadasId(),deleteRutaId.toString());
							    if (pos!=-1)
							    	cMapController.getMapActive().getRutasSeleccionadasId().splice(pos,1);
							    cMapController.getMapActive().ocultarRuta(deleteRutaId.toString);
								misRutasHash.remove(deleteRutaId.toString());
								if (cMapController.getMapActive().getMisRutasMarkersHash().containsKey(deleteRutaId.toString())){
									cMapController.getMapActive().getMap().removeLayer(cMapController.getMapActive().getMisRutasMarkersHash().get(deleteRutaId.toString()));
									cMapController.getMapActive().getMisRutasMarkersHash().remove(deleteRutaId.toString());
								}
								deleteRutaId = null;
							}
							cMapController.getMapActive().refreshViewRutas();
						}else {
							alert ("Error en consulta a DB: No se pudieron eliminar las rutas seleccionados");
						}
						$j("#iconoMapa").removeClass().addClass("icono_mapa");
						autoRefreshFlag = 0;
					}
				});

			}
		 }else{
		 		alert ('Debe seleccionar por lo menos una ruta para poder realizar esta operacion.');
		 }
   },
   removeHighlightRutaMarker: function(){
		if (this.highlightRuta){
			this.oMap.removeLayer(this.highlightRuta);
			this.highlightRuta.destroy();
			this.highlightRuta=null;
		}
	},

	highlightRutaMarker: function(idRuta){
		var miRuta = misRutasHash.get(idRuta.toString());
	  	var polyPoints = new Array();
	  	for (var i=0; i<miRuta.PUNTOSLAT.length; i++){
			var geoPoint = new OpenLayers.Geometry.Point(miRuta.PUNTOSLNG[i],miRuta.PUNTOSLAT[i]).transform(this.displayProjection, this.projection);
			polyPoints[i]=geoPoint;
	  	}
	  	if(this.highlightRuta) {
	  		this.oMap.removeLayer(this.highlightRuta);
	  		this.highlightRuta.destroy();
	  	}
	  	this.highlightRuta = new OpenLayers.Layer.Vector("highlightRuta");
	  	this.oMap.addLayer(this.highlightRuta);
	  	var lineString 	= new OpenLayers.Geometry.LineString(polyPoints);
	  	var feature 		= new OpenLayers.Feature.Vector(lineString,null,{
           strokeColor: "#"+miRuta.color.toUpperCase(),
           strokeWidth: 6
	  	});
	  	this.highlightRuta.addFeatures(feature);
	  	this.centrarEnBounds(lineString.getBounds());
	  	clearTimeout(this.highlightRutaTimeOut);
	  	this.highlightRutaTimeOut = setTimeout ( "cMapController.getMapById("+this.id+").removeHighlightRutaMarker();", 5000 );
	},
   	rutaChangeColor: function(newColor){
		document.getElementById('colorRutaText').color.hidePicker();
		if (this.newRutaPolygonLayer.features.length>0){
			this.drawNewRuta();
		}
	},
	dibujarRutaPorDireccion: function(ruta){
		this.clearNewRuta();
		this.newRutasHistorial = new Array();
		var puntoMoviles= new Array();
		var lotePoints 	= new Array();
		var idMap 		= this.id;
 		//function highlight in point
 		createFeaturePoint = function(idMap,point, color){
 			var colorFill = "#FFFFFF";
 			if (color)
 				colorFill = color;
 			var radio = cMapController.getMapById(idMap).getMap().getExtent().getHeight()/25;
 			var objF = OpenLayers.Geometry.Polygon.createRegularPolygon(point, radio, 20, 90);
 			var theFeature = new OpenLayers.Feature.Vector(objF,null,{
             					strokeColor: "#202020",
 								fillColor: colorFill,
             					strokeOpacity: 0.6,
 								fillOpacity: 0.6,
             					strokeWidth: 3
         					 });
 			return theFeature;
 		}

 		var origen 			= new OpenLayers.Geometry.Point(ruta.legs.start_location.lng(), ruta.legs.start_location.lat()).transform(this.displayProjection, this.projection);
 		var origenLonLat	= new OpenLayers.LonLat(ruta.legs.start_location.lng(), ruta.legs.start_location.lat()).transform(this.displayProjection, this.projection);
 		var featureBounds 	= new OpenLayers.Bounds();
 		featureBounds.extend(origen);
 		puntoMoviles.push(origen);

 		var stepsPuntos 	= ruta.steps;
		var destino			= new OpenLayers.Geometry.Point(ruta.legs.end_location.lng(), ruta.legs.end_location.lat()).transform(this.displayProjection, this.projection);
		var destinoLonLat	= new OpenLayers.LonLat(ruta.legs.end_location.lng(), ruta.legs.end_location.lat()).transform(this.displayProjection, this.projection);
		puntoMoviles.push(destino);
		for (var i=0; i < stepsPuntos.length; i++){
			if(stepsPuntos[i].path != null && stepsPuntos[i].path != ""){
				var path = stepsPuntos[i].path;
				for(var j = 0; j < path.length; j++){
					var oPoint = new OpenLayers.Geometry.Point(path[j].lng(), path[j].lat()).transform(this.displayProjection, this.projection);
					lotePoints.push(oPoint);
					featureBounds.extend(oPoint);
					this.rutaAddVertice(new OpenLayers.LonLat(path[j].lng(), path[j].lat()).transform(this.displayProjection, this.projection),stepsPuntos[i].instructions, true);
				}
			}
		}
		this.addChangeNuevaRuta();
		this.drawNewRuta();
		featureBounds.extend(destino);

		var feature = this.drawPolyLine(lotePoints, '#330099');
		this.searchRutasLayer.addFeatures(feature);

		this.searchRutasMarkers = new OpenLayers.Layer.Markers("Mis Rutas Markers");
		var icon 	= mapIcons.getHistoricoIcon("inicio");
		var marker 	= this.crearMarcaDePuntoEnRuta(origenLonLat,"Origen",ruta.legs.start_address,icon);
		this.searchRutasMarkers.addMarker(marker);
		var icon 	= mapIcons.getHistoricoIcon("fin");
		var marker 	= this.crearMarcaDePuntoEnRuta(destinoLonLat,"Fin",ruta.legs.end_address,icon);
		this.searchRutasMarkers.addMarker(marker);

		this.oMap.zoomToExtent(featureBounds);

		this.oMap.addLayer(this.searchRutasMarkers);
		this.oMap.addLayer(this.searchRutasLayer);
		
		if(this.rutaDesdeMovil){
			var inicio = new Object();
			inicio.lon = ruta.legs.start_location.lng();
			inicio.lat = ruta.legs.start_location.lat();
			this.puntosRutaIniFin.push(inicio);
		}
	},
	
	guardarRuta: function(){
		hideDiv('newRutaErrorDisplay');
		document.getElementById("newRutaErrorDisplay").innerHTML = "";

		if (!this.validarNuevaRuta()){
			return false;
		}
		puntosLNG = new Array();
		puntosLAT = new Array();
		if(this.rutaDesdeHistorico && this.markersRutaHistorico[0]!=null && this.markersRutaHistorico[1]!=null){
//			if( (this.markersRutaHistorico[0]==null && this.markersRutaHistorico[1]!=null)
//				|| (this.markersRutaHistorico[0]!=null && this.markersRutaHistorico[1]==null) ){
//				document.getElementById('newRutaErrorDisplay').innerHTML = 'Debe seleccionar inicio y fin para crear la ruta.';
				var posIni = null;
				var posFin = null;
				var posAux = null;
				for (i=0; i< this.newRutaPoints.length; i++){
					if(posIni== null && this.newRutaPoints[i].equals(this.markersRutaHistorico[0].lonlat.clone().transform(this.projection, this.displayProjection))){
						posIni = i;
					}
					if(posFin == null && this.newRutaPoints[i].equals(this.markersRutaHistorico[1].lonlat.clone().transform(this.projection, this.displayProjection))){
						posFin = i;
					}
				}
				if(posIni!=null && posFin!=null){
					if(parseInt(posIni) > parseInt(posFin) ){
						posAux 	= posFin;
						posFin 	= posIni; 
						posIni 	= posAux; 
					}
					var j=0;
					for (i=posIni; i <= posFin; i++){
						puntosLNG[j]= this.newRutaPoints[i].lon.toString().substr(0,11);
						puntosLAT[j]= this.newRutaPoints[i].lat.toString().substr(0,11);
						j++;
					}
				}
		}else{
			for (i=0; i <  this.newRutaPoints.length; i++){
				puntosLNG[i]= this.newRutaPoints[i].lon.toString().substr(0,11);
				puntosLAT[i]= this.newRutaPoints[i].lat.toString().substr(0,11);
			}
		}
		reqParamMisRutas = "COMMAND=SAVE";
		reqParamMisRutas += "&ORDERID="+document.getElementById('rutaIdHID').value;
		reqParamMisRutas += "&NOMBRE="+document.getElementById('nombreRuta').value;
		reqParamMisRutas += "&LATITUDES="+puntosLAT.toString();
		reqParamMisRutas += "&LONGITUDES="+puntosLNG.toString();
		reqParamMisRutas += "&DESCRIPCION="+document.getElementById('descRuta').value;
		reqParamMisRutas += "&CUENTAID="+LOGIN.tablaId;
		reqParamMisRutas += "&COLOR="+document.getElementById('colorRutaId').value;
		reqParamMisRutas += "&OBJETIVO="+LOGIN.objetivo;
		reqParamMisRutas += "&ISBYKOM="+LOGIN.isBykom;
		if(LOGIN.isBykom){
			reqParamMisRutas += "&TOLERANCIA="+$j("#toleranciaMisRuta").val();
		}
		autoRefreshFlag = 1;
		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
		$j.ajax({
			type: "POST",
			url: "persistirruta.php",
			data: reqParamMisRutas,
			beforeSend: function(){
			},
			success: function(data) {
				cMapController.getMapActive().verOpcionesCreacionRuta();
				cMapController.getMapActive().setRutaDesdeMovil(false);
				$j('#LoaderAjax').hide();
				nuevaRutaJSON = jQuery.parseJSON(data);
				if (nuevaRutaJSON.id != -1){
					misRutasHash.put(nuevaRutaJSON.id.toString(),nuevaRutaJSON);
					alert('Grabacion realizada con exito!');
					if (indexOfArray(cMapController.getMapActive().getMisRutasVisibles(),nuevaRutaJSON.id.toString())==-1) //La ruta estaba invisible .:. la marco como visible
						cMapController.getMapActive().getMisRutasVisibles().push(nuevaRutaJSON.id.toString());
					marker = cMapController.getMapActive().getMisRutasMarkersHash().get(nuevaRutaJSON.id.toString());
					if ((marker!=null)&&(marker!='undefined')){ //La marca de ruta estaba creada, es una modificacion...
						//remuevo la vieja marca de ruta del registro
						cMapController.getMapActive().getMisRutasMarkersHash().remove(nuevaRutaJSON.id.toString());
					}			
					cMapController.getMapActive().cleanEstadoNuevaRuta();
					cMapController.getMapActive().refreshViewRutas();
					cMapController.getMapActive().limpiarPuntosRutaDeHistorico();
				}else{
					document.getElementById('newRutaErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar la ruta.'
					showDiv('newRutaErrorDisplay');
				}
				$j("#iconoMapa").removeClass().addClass("icono_mapa");
				autoRefreshFlag = 0;
			}
		});
    },
	getInfoMisPuntosEnRutasHTML: function(nombre,datos){
		html = '<table width="200"><tr>';
		html += ' <td><span class="infoWindowTitle">'+nombre+'</span></td>';
       	html += ' <td align="right" valign="top">';
		html += '</td></tr>';
		html += '<tr><td colspan="2"><span class="inputTEXT">'+datos+'</span></td></tr>';
		html += '</table>';
		return html;
	},
	crearMarcaDePuntoEnRuta: function(point,name,html,icon) {
		var marker = new OpenLayers.Marker(point,icon);
		var mapaId = this.id;
		marker.events.register("click", marker, function() {
			cMapController.getMapById(mapaId).openInfoEvento(point, cMapController.getMapById(mapaId).getInfoMisPuntosEnRutasHTML(name,html) );
        	});
        return marker;
    },
    borrarTodasLasMarcas: function(){
    	this.removeAllDistancasCercaniasLayer();
    	clearEventosMonitorFromMap();
    	this.oHistorico.borrarMarcasHistoricoResumen();
    	this.oHistorico.clearEventoReporteRecorrido();// borra las marcas que se mapean desde el reporte
    	if(this.oHistorico.getLayersViajes().keys().length > 0){
//    		if(confirm("Desea borrar los viajes mapeados?")){
    			this.oHistorico.clearAllViajes();
//    		}
    	}
    	if(this.oHistorico.getLayersSimulacionViajes().keys().length > 0){
//	    	if(confirm("Desea borrar las simulaciones de viajes?")){
	    		this.oHistorico.limpiarTodosSimulacionViaje();
//	    	}
    	}
    	if(this.oHistorico.getLayersHistoricoRecorrido().length > 0){
//	    	if(confirm("Desea borrar los recorridos mapeados?")){
	    		this.oHistorico.clearHistoricos();
//	    	}
    	}
    	this.removePopup();
    },
    irHastaPunto: function(idMovil){
    	this.clearNewRuta();
    	this.nuevaRuta();
    	this.rutaDesdeMovil = true;
    	clickOpcionAcordeon("misrutas");
    	var movil 		= misVehiculosHash.get(idMovil.toString());
    	var movilLonLat = new OpenLayers.LonLat(parseFloat(movil.POSIMOVIL.longitud), parseFloat(movil.POSIMOVIL.latitud));
    	cMapController.getMapActive().setTipoCrearRuta(3);
    	this.setEstadoNuevaRuta();
    	this.puntosRutaIniFin.push(movilLonLat);
    	this.verOpcionesCreacionRuta();
    },
    irHastaDireccion: function(idMovil){
    	this.clearNewRuta();
    	this.nuevaRuta();
    	this.rutaDesdeMovil = true;
    	clickOpcionAcordeon("misrutas");
    	var movil 		= misVehiculosHash.get(idMovil.toString());
    	var movilLonLat = new OpenLayers.LonLat(parseFloat(movil.POSIMOVIL.longitud), parseFloat(movil.POSIMOVIL.latitud));
    	cMapController.getMapActive().setTipoCrearRuta(3);
    	this.puntosRutaIniFin.push(movilLonLat);
    	this.verOpcionesCreacionRuta();
    	$j(".ui-dialog div" ).remove();
    	$j("#popupsAux").load("vistas/irHastaDireccion.html", function(){	
    		$j("#movilDescrip").html(movil.label);	
    		$j("#movilAproxUbicacion").html(movil.POSIMOVIL.direccionAbrev);
    	});
    },
    verOpcionesCreacionRuta: function(){
    	$j("#RutaDesdeArchivo").hide();
		$j("#rutaDesdeArchivo").hide();
		$j("#RutaDesdeHistorico").hide();
		$j("#rutaDesdeHistorico").hide();
		$j("#rutaDesdeMovil").hide();
		$j("#RutaPorDireccion").hide();	
		$j("#rutaPorIniFin").hide();
		$j("#rutaDireccion").hide();
		$j("#creacionRutaManual").hide();
		$j("#deshacerUltCambio").hide();	
		$j("#RutaManual").show();	
    	if(this.rutaDesdeArchivo){
    		$j("#RutaDesdeArchivo").show();
    		$j("#rutaDesdeArchivo").show();
    	}else if(this.rutaDesdeHistorico){
    		$j("#RutaDesdeHistorico").show();
    		$j("#rutaDesdeHistorico").show();
    	}else if(this.rutaDesdeMovil){
	    	$j("#rutaDesdeMovil").show();
		}else{
    		if(!cGeoController.implementaRouting()){
    			$j("#rutaDireccion").hide();
    		}else{
    			$j("#rutaDireccion").show();
    		}
    		$j("#deshacerUltCambio").show();	
    		$j("#creacionRutaManual").show();
    		$j("#RutaDesdeArchivo").show();
    		$j("#rutaDesdeArchivo").show();
    		$j("#rutaPorIniFin").show();
    		var elementos = document.getElementsByName("tipoCreacionRuta");
    		for(var i=0; i<elementos.length; i++) {
    			if(elementos[i].checked){
    				tipoCreacionRuta = elementos[i].value;
    				break;
    			}
    		}
    		cambiarTipoCreacionRuta(elementos[i]);
	    }
    },
    limpiarEstadosActivos: function(){
    	this.cleanEstadoNuevaRuta();
    },
    printInfoEventoSeguimiento:  function(obj,idDivCuenta){
    	var estado 	= "PENDIENTE";
    	if(obj.procesado!=0 || obj.procesado==null){
			estado 	= "FINALIZADO"
		}
    	var linkHtml = "<a id='"+idDivCuenta+"linkInfoCuenta"+obj.idCuenta+"' style='margin-right: 5px;' href='javascript:;' onclick='cMapController.getMapById("+this.id+").verInfoCuenta("+obj.idCuenta+",\""+idDivCuenta+"\");'>Info. Cuenta</a>";
    	linkHtml 	+= "<a id='"+idDivCuenta+"linkInfoEvento"+obj.idCuenta+"' style='margin-right: 5px;' href='javascript:;' onclick='cMapController.getMapById("+this.id+").verInfoEvento("+obj.idCuenta+",\""+idDivCuenta+"\");'>Info. Evento</a>";
    	linkHtml 	+= "<a id='"+idDivCuenta+"linkMasEventos"+obj.idCuenta+"' href='javascript:;' onclick='cMapController.getMapById("+this.id+").verMasEventosPendientes("+obj.idCuenta+",\""+idDivCuenta+"\");'>Ver mas eventos: ("+obj.cantidadPendientes+")</a>";
    	
    	$j("#"+idDivCuenta+"Info_LinksEvento"+obj.idCuenta).html(linkHtml);
    	$j("#"+idDivCuenta+"Info_LinksEvento"+obj.idCuenta).show();
    	
    	if(this.linkEventoShow=="linkInfoCuenta"){
    		$j("#"+idDivCuenta+"linkInfoCuenta"+obj.idCuenta+"").hide();
    	}else if(this.linkEventoShow=="linkInfoEvento"){
    		$j("#"+idDivCuenta+"linkInfoEvento"+obj.idCuenta+"").hide();
    	}else if(this.linkEventoShow=="linkMasEventos"){
    		$j("#"+idDivCuenta+"linkMasEventos"+obj.idCuenta+"").hide();
    	}else{
    		$j("#"+idDivCuenta+"linkInfoCuenta"+obj.idCuenta+"").hide(); 
    		this.linkEventoShow = "linkInfoCuenta";
    	}
    	
    	var myDate 	 = new MyDate(obj.fechaHora);
		var fechaElegante =  myDate.elegantFormat();
		var infoHtml = "<div>";
		infoHtml 	+= "<div><b>Detalle: </b>"+obj.detalle+"-"+fechaElegante+"</div>";
		if(obj.idMovilAsignado!=null){
			infoHtml+= "<div><b>Movil asignado: </b>"+obj.nombreMovilAsignado+" <span id='distMovilAsignado'></span></div>";
		}
		infoHtml 	+= "<div><b>Estado evento</b>: "+estado+"</div>";
		infoHtml 	+= "</div>";
		$j("#"+idDivCuenta+"Info_Evento"+obj.idCuenta).html(infoHtml);
		var htmlPendientes	= "";
		if(obj.cantidadPendientes>0){
			//htmlPendientes 	+= "<div><a href='javascript:;' onclick='cMapController.getMapById("+this.id+").volverMasEventosPendientes("+obj.idCuenta+",\""+idDivCuenta+"\");'>Volver</a> </div>";
			htmlPendientes	+= "<table><tr><th>Evento</th><th>Fecha</th></tr>";
			for(var i=1;i<=obj.cantidadPendientes;i++){
				var fecha 	= new MyDate(obj.arrayObj[i].fechaHora);
				var fechaElegante =  fecha.elegantFormat();
				htmlPendientes 	+= "<tr>";
				htmlPendientes	+= "<td>"+obj.arrayObj[i].detalle+"</td>";
				htmlPendientes	+= "<td>"+fechaElegante+"</td>";
				htmlPendientes 	+= "</tr>";
			}
			htmlPendientes 	+= "</table>";
		}else{
			htmlPendientes = "No hay eventos pendientes";
		}
		$j("#"+idDivCuenta+"Info_MasEventos"+obj.idCuenta).html(htmlPendientes);
    },
    /**
     * Fortmato del array de objetos
     * obj.idEvto
     * obj.fechaHora
	 * obj.detalle	
	 * obj.idCl
	 * obj.nombreCuenta
	 * obj.idCuenta	
	 * obj.objetivoCuenta
	 * obj.movilAsignado
	 * obj.latMovilAsignado
	 * obj.lonMovilAsignado
	 * obj.nombreMovilAsignado
	 * obj.idMovilAsignado
	 * obj.procesado
	 * obj.prioridad
	 * @params array arrayObj
	 * @params int idEventoSeguimiento
     */
    seguimientoEventoCliente: function(arrayObj,idEventoSeguimiento){
    	var obj	= arrayObj[0];//es el que estoy siguiendo porque ya hice el ordenamiento y deje el evento a seguir en la primera posicion
    	var cantidadPendientes	= arrayObj.length;
    	if(obj.idEvto == idEventoSeguimiento && arrayObj.length > 0){
    		cantidadPendientes	= arrayObj.length;
    		cantidadPendientes--;
    	}
    	var objetivoCuenta 		= obj.objetivoCuenta;
    	obj.arrayObj			= arrayObj;
    	obj.cantidadPendientes	= cantidadPendientes;
    	this.objetoMonitorearEventoCliente 	= obj;
    	var monitorEventoActivo = this.estadoActivoMonitorearEventoCliente;

    	var cuenta 	= null;
    	var lat		= null;
    	var lon		= null;
    	var cuentaVisible = false;
    	var estado 	= "PENDIENTE";
    	if(obj.procesado!=0 || obj.procesado==null){
			estado 	= "FINALIZADO"
		}
    	if(objetivoCuenta==1){//FIJO
    		cuenta 	= misFijosHash.get( obj.idCuenta );
    		var idDivCuenta = "fijo"; 
    		if(cuenta!=null){
    			lat 	= cuenta.latitud;
    			lon 	= cuenta.longitud;
    		}
    		if(indexOfArray(this.fijosVisiblesId,obj.idCuenta.toString())!=-1){ // Tiene que estar VISIBLE
    			cuentaVisible = true;
    		}
    	}else{//MOVIL
    		cuenta 	= misVehiculosHash.get( obj.idCuenta.toString());
    		var idDivCuenta = "movil"; 
    		if(cuenta!=null){
    			lat		= cuenta.POSIMOVIL.latitud;
    			lon 	= cuenta.POSIMOVIL.longitud;
    		}
    		if(indexOfArray(this.vehiculosVisiblesId,obj.idCuenta.toString())!=-1){ // Tiene que estar VISIBLE
    			cuentaVisible = true;
    		}
    	}
    	this.printInfoEventoSeguimiento(obj,idDivCuenta);
    	
    	if(this.highlightEventoClienteLayer){
    		this.oMap.removeLayer(this.highlightEventoClienteLayer);
    		this.highlightEventoClienteLayer.destroy();
    		this.highlightEventoClienteLayer=null;
    	}
    	if(this.layerSeguimientoEvento){
    		this.oMap.removeLayer(this.layerSeguimientoEvento);
    		this.layerSeguimientoEvento.destroy();
    		this.layerSeguimientoEvento=null;
    	}
    	//create vector layer
    	this.highlightEventoClienteLayer= new OpenLayers.Layer.Vector("highlightCercanias");
    	this.layerSeguimientoEvento 	= new OpenLayers.Layer.Markers( "highlightIcons" );
		//function highlight in point
		/*createFeaturePoint = function(idMap,point, color){
			var colorFill = "#FFFFFF";
			if (color)
				colorFill = color;
			var radio= cMapController.getMapById(idMap).getMap().getExtent().getHeight()/20;
			//radio 	= 700;
			var objF = OpenLayers.Geometry.Polygon.createRegularPolygon(point, radio, 20, 90);
			var theFeature = new OpenLayers.Feature.Vector(objF,null,{
				strokeColor: "#202020",
				fillColor: colorFill,
				strokeOpacity: 0.6,
				fillOpacity: 0.6,
				strokeWidth: 1
			});
			return theFeature;
		}*/
		//function draw line
		createFeatureLine = function(from, to, color){
			var colorLine = "#414141";
//			if (color)
//				colorLine = color;
			var lineString = new OpenLayers.Geometry.LineString([from, to]);
			var theFeature = new OpenLayers.Feature.Vector(lineString,null,{
				strokeColor: colorLine,
				strokeOpacity: 0.6,
				strokeWidth: 2,
				strokeDashstyle: 'dash'
			});
			return theFeature;
		}
		var colorRojo		= "circulo3";
		var colorVerde		= "circulo2";
		var colorAmarillo	= "circulo1";
		var color 			= "";
		if(parseInt(obj.prioridad) == 1){
			color = colorRojo;
		}else if(parseInt(obj.prioridad)>=2 && parseInt(obj.prioridad) <= 3){//entre 2 y 3 inclusive
			color = colorAmarillo;
		}else if(parseInt(obj.prioridad)>=4 && parseInt(obj.prioridad) <= 9){//entre 4 y 9 inclusive
			color = colorVerde;
		}
		var feat = null;
		var featureBounds 	= new OpenLayers.Bounds();
    	if(lat!=null && lon != null){
	    	var oPointCuenta= new OpenLayers.Geometry.Point(lon,lat).transform(this.displayProjection, this.projection);
	    	var lonlat 		= new OpenLayers.LonLat(parseFloat(lon),  parseFloat(lat)).transform( this.displayProjection,  this.projection);
	    	if(cuentaVisible){
	    		if(monitorEventoActivo){//si esta siendo monitoreado el evento hago el zoom entre los 2 puntos
	    			featureBounds.extend(oPointCuenta);
	    		}
	    		if( estado != "FINALIZADO" ){
	    			//Creo el circulo sobre la cuenta monitoreada
	    		//	feat = createFeaturePoint(this.id,oPointCuenta, color);
	    		//	this.highlightEventoClienteLayer.addFeatures(feat);
 					
 					var markerEvento 	= createMarkerSentido(lonlat, mapIcons.getSentidoIcon(color));
 					this.layerSeguimientoEvento.addMarker(markerEvento);
	    		}
	    	}
    	}
    	
    	var movilVisible = false;
    	if(obj.idMovilAsignado!=null){
	 		var movilAsig 	= misVehiculosHash.get( obj.idMovilAsignado.toString());
	 		if(movilAsig != null && movilAsig.POSIMOVIL != null){
	 			if(indexOfArray(this.vehiculosVisiblesId,movilAsig.id.toString())!=-1){ // Tiene que estar VISIBLE
	 				var oPointMovil = new OpenLayers.Geometry.Point(movilAsig.POSIMOVIL.longitud,movilAsig.POSIMOVIL.latitud).transform(this.displayProjection, this.projection);
	 				var lonlatMovil	= new OpenLayers.LonLat(parseFloat(movilAsig.POSIMOVIL.longitud),  parseFloat(movilAsig.POSIMOVIL.latitud)).transform( this.displayProjection,  this.projection);
	 				if(monitorEventoActivo){//si esta siendo monitoreado el evento hago el zoom entre los 2 puntos
	 					featureBounds.extend(oPointMovil);
	 				}
	 				if(estado != "FINALIZADO"){
	 					//Creo el circulo sobre el movil asignado
	 					//feat = createFeaturePoint(this.id,oPointMovil, color);
	 					
	 					var markerEvento 	= createMarkerSentido(lonlatMovil, mapIcons.getSentidoIcon(color));
	 					this.layerSeguimientoEvento.addMarker(markerEvento);
	 				}
	 				movilVisible = true;
	 				var lineDist = new OpenLayers.Geometry.LineString([oPointCuenta, oPointMovil]);
	 				var distancia = lineDist.getGeodesicLength(this.projection);
	 				if(distancia>0){
	 					distancia = distancia/1000;
	 				}
	 				$j("#distMovilAsignado").html(" a "+distancia.toFixed(3)+" Km.");
	 			}
	 		}
    	}
 		if(movilVisible && cuentaVisible){
 			if( estado != "FINALIZADO" ){
 				//Creo la linea punteada entre los 2 puntos
 				color = "#CCC";
 				var line = createFeatureLine(oPointCuenta, oPointMovil, color);
 				this.highlightEventoClienteLayer.addFeatures(line);
 			}
 		}
 		if(movilVisible || cuentaVisible){
	 		//centrar en bounds
	 		if(monitorEventoActivo){
	 			this.oMap.zoomToExtent(featureBounds);
	 		}
 		}
		//add layer
 		this.oMap.addLayer(this.layerSeguimientoEvento);
		this.oMap.addLayer(this.highlightEventoClienteLayer);
		this.layerSeguimientoEvento.div.style.zIndex = 724;
    },
    activarMonitorearEvento: function(){
    	this.noSeguirMovil();
    	this.estadoActivoMonitorearEventoCliente = true;
    	this.refreshViewMisVehiculos();
    	this.refreshViewMisFijos();
    },
    desactivarMonitorearEvento: function(){
    	this.estadoActivoMonitorearEventoCliente = false;
    	this.refreshViewMisVehiculos();
    	this.refreshViewMisFijos();
    },
    verInfoCuenta: function(idCuenta,idDivCuenta){
    	$j("#"+idDivCuenta+"Info_"+idCuenta).show();
    	$j("#"+idDivCuenta+"Info_Evento"+idCuenta).hide();
    	$j("#"+idDivCuenta+"Info_MasEventos"+idCuenta).hide();
    	$j("#"+idDivCuenta+"linkInfoCuenta"+idCuenta).hide();
    	$j("#"+idDivCuenta+"linkInfoEvento"+idCuenta).show();
    	$j("#"+idDivCuenta+"linkMasEventos"+idCuenta).show();
    	this.linkEventoShow = "linkInfoCuenta";
    },
    verInfoEvento: function(idCuenta,idDivCuenta){
    	$j("#"+idDivCuenta+"Info_Evento"+idCuenta).show();
    	$j("#"+idDivCuenta+"Info_MasEventos"+idCuenta).hide();
    	$j("#"+idDivCuenta+"Info_"+idCuenta).hide();
    	$j("#"+idDivCuenta+"linkInfoEvento"+idCuenta).hide();
    	$j("#"+idDivCuenta+"linkInfoCuenta"+idCuenta).show();
    	$j("#"+idDivCuenta+"linkMasEventos"+idCuenta).show();
    	this.linkEventoShow = "linkInfoEvento";
    },
    verMasEventosPendientes : function (idCuenta,idDivCuenta){
    	$j("#"+idDivCuenta+"Info_MasEventos"+idCuenta).show();
    	$j("#"+idDivCuenta+"Info_Evento"+idCuenta).hide();
    	$j("#"+idDivCuenta+"Info_"+idCuenta).hide();
    	$j("#"+idDivCuenta+"linkInfoCuenta"+idCuenta).show();
    	$j("#"+idDivCuenta+"linkInfoEvento"+idCuenta).show();
    	$j("#"+idDivCuenta+"linkMasEventos"+idCuenta).hide();
    	this.linkEventoShow = "linkMasEventos";
    },
    volverMasEventosPendientes : function (idCuenta,idDivCuenta){
    	$j("#"+idDivCuenta+"Info_MasEventos"+idCuenta).hide();
    	$j("#"+idDivCuenta+"Info_Evento"+idCuenta).show();
    	$j("#"+idDivCuenta+"Info_"+idCuenta).show();
    },
    crearRutaDesdeHistorico: function(arrayPoints){
    	this.rutaDesdeHistorico = false;
    	this.clearNewRuta();
    	this.nuevaRuta();
    	this.rutaDesdeHistorico = true;
    	cMapController.getMapActive().setTipoCrearRuta(4);
    	clickOpcionAcordeon("misrutas");
    	this.verOpcionesCreacionRuta();
    	for(var i = 0; i < arrayPoints.length; i++){
    		this.newRutaPoints.push(arrayPoints[i].lonlat.clone().transform(this.projection, this.displayProjection));
    	}
    },
    limpiarPuntosRutaDeHistorico: function(){
	    if(this.rutaDesdeHistorico){
			var idRec = this.oHistorico.getRecorridoActivo();
			var oLayerInfoPoints = this.oHistorico.getLayersHistoricoRecorridoInfoPoints()[idRec];
			if(oLayerInfoPoints!=null){
				this.oMap.removeLayer(oLayerInfoPoints);
				this.oHistorico.getLayersHistoricoRecorridoInfoPoints()[idRec].destroy();
				this.oHistorico.getLayersHistoricoRecorridoInfoPoints().splice(idRec,1);
			}
			this.rutaDesdeHistorico = false;
		}
    },
    cancelarIniFinRutaDesdeHistorico: function(){
		var markerAnt = this.markersRutaHistorico[0];
		if(markerAnt!=null && this!=markerAnt){
			var size = new OpenLayers.Size(11,11);
			markerAnt.setUrl('images/vertice.png');
			markerAnt.icon.setSize(size);
		}
		var markerAnt = this.markersRutaHistorico[1];
		if(markerAnt!=null && this!=markerAnt){
			var size = new OpenLayers.Size(11,11);
			markerAnt.setUrl('images/vertice.png');
			markerAnt.icon.setSize(size);
		}
		this.markersRutaHistorico[0] = null;
		this.markersRutaHistorico[1] = null;
	},
	generarRutaDesdeArchivo: function(){
		alert("aaaa");
		alert(this.rutaTemporal);
	}
});